码迷,mamicode.com
首页 > 其他好文 > 详细

Mybatis,生成动态代理

时间:2018-12-05 20:49:27      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:hand   alt   hash   known   初始化   div   bubuko   try   win   

  初始化的時候会解析<mappers>标签,会放入到Configuration的mapperRegistry中的knownMappers:Map<Class<?>, MapperProxyFactory<?>> knownMappers = new HashMap<>();
  如图1
  第一种是设置了<package>,<package>和<mapper>不同同时设置。
  第二种是设置了*.xml文件,这种方式会继续解析*.xml中的元素,如图2,解析了完了会调用bindMapperForNamespace()方法放入knownMappers中,如图3
  第三种是直接设置了class
  图1:
  技术分享图片
 
图2:
技术分享图片
图3
技术分享图片
看下MapperRegistry是怎么add
图4
技术分享图片
这里有一个解析注解的动作,但是,如果前面已经解析过*.xml的话其实就不解析了
图5
技术分享图片
其实到这里,解析完.*xml并把所有的类型都放到了knownMappers中,那在来看下图5中MapperProxyFactory在初始化的时候做了些什么事情:
图6
技术分享图片
把mapper的source类型赋给mapperInterface。
 
 
执行的时候,默认使用的是sqlSession的子类DefaultSqlSession,调用getMapper方法
图7
技术分享图片
从mapperRegistry中获取
图8
技术分享图片
那么在来看下mapperProxyFactory.newInstance(sqlSession),先实例化了一个MapperProxy,其实就是实现了InvocationHandler,这里的mapperInterface,就是之前knownMappers加载类型
图9
技术分享图片技术分享图片
最后在通过动态代理返回,如图10
图10
技术分享图片
到这里,其实mybatis的动态代理生成接好了,在调用代理类的方法时会调用InvocationHandler的invoke方法,那么下次再看在invoke是怎么调用的。

Mybatis,生成动态代理

标签:hand   alt   hash   known   初始化   div   bubuko   try   win   

原文地址:https://www.cnblogs.com/shenqiaqia/p/10072710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!