一、动态代理

动态代理是一种比较高级的代理模式,它的典型应用就是Spring AOP。

在传统的动态代理模式中,客户端通过ProxySubject调用RealSubject类的request( )方法,同时还在代理类中封装了其他的方法,如preRequest( )和postRequest( ),来处理一些问题。如果按照这种方法使用代理模式,那么真实主题角色必须是实现已经存在的,并将其作为代理对象的内部成员属性。如果一个真实主题角色必须对应着一个代理主题角色,这将导致系统内类的个数急剧增加,因此需要减少系统中类的个数。

如何在事先不知道真是主题角色的情况下使用代理主题角色,这都是动态代理需要解决的问题。

Java动态代理实现相关类位于java.lang.reflect包,主要涉及两个类:InvocationHandler 接口 和 Proxy 类

InvocationHandler 接口,是代理实例的调用处理程序实现的接口

1 public Object invoke(Object proxy, Method method, Object[] args)
2 throws Throwable;

invoke方法第一个参数 proxy 表示代理类,第二个参数 method 代表需要代理的方法,第三个参数 args 表示代理方法的参数数组

Proxy 类,动态代理类,常用的方法

1 public static Object newProxyInstance(ClassLoader loader,
2 Class<?>[] interfaces,
3 InvocationHandler h)

newProxyInstance方法根据传入的接口类型interfaces返回一个动态创建的代理类实例。第一个参数 loader 代表代理类的类加载器,第二个参数 interfaces 表示代理类实现的的接口类列表,第三个参数 h 表示所指派的调用处理程序类。

二、绑定Mapper的配置

org.apache.ibatis.binding下关系,首先调用SqlSession的getMapper方法获取mapper的代理,getMapper方法在调用Configuration的getMapper方法,这是使用到MapperRegister,接下来的关系如如所示。

三、生成的具体Mapper代理类解析

参考:探索Mybatis之JDK动态代理:探究Proxy.newProxyInstance()生成的代理类解析

最新文章

  1. instanceof运算符
  2. canvas初探2
  3. Linux更改主机名--适用于Centos
  4. 2014 Super Training #1 B Fix 状压DP
  5. Threat Risk Modeling Learning
  6. WordPress博客教程:博客赚钱
  7. 最近用到这个强大的工具 PhysicsEditor (转)
  8. 纯HTML页面为了避免频繁前后台Ajax交互方案
  9. 禁用物料不允许BOM
  10. windows后台服务程序编写
  11. C# 毛玻璃效果
  12. rsyslog管理分布式日志
  13. 201521123067 《Java程序设计》第7周学习总结
  14. spring security学习
  15. linux常用软件安装,常用命令
  16. [Objective-C语言教程]字符串(16)
  17. 无法将数据库从SINGLE_USER模式切换回MULTI_USER模式(Error 5064),及查找SQL Server数据库中用户spid(非SQL Server系统spid)的方法
  18. Stack Overflow 2016年度 20个最佳Python问题(一)
  19. Gitlab搭建安装及使用中遇到的问题。
  20. springcloud-Feign基础使用

热门文章

  1. git各种操作:基本操作 and 多人协作 and 冲突解决
  2. 215 day01_Object类、常用API
  3. 【OI技巧】解决cin、cout因输入输出慢而TLE的问题
  4. ESP8266- ESP01之AT固件下载及其他问题
  5. PHP匿名类的用法
  6. 解决dede编辑器不能保存word文档样式问题
  7. win10 移动端 android 测试环境搭建
  8. 超详细unittest单元测试框架总结
  9. django错误处理
  10. [转载]让你玩转代码的编辑神器phpstorm功能详解