Mybatis源码解读(Spring整合篇)

1,322次阅读
没有评论

共计 881 个字符,预计需要花费 3 分钟才能阅读完成。

Mybatis源码解读(Spring整合篇)
开始之前,我们先结合前文说的稍作思考,Mybatis的XML文件会被处理后作为Configuration的属性存储,然而我们更倾向于面向接口编程,所以出现了Mapper对应的接口,可是现在我们空有定义,最终的sql又是XML里定义的,如何破局?
Mybatis源码解读(Spring整合篇)
显然我们需要中间人来处理,比如代理。Mybatis使用JDK动态代理来处理这个接口定义和XML语义,核心如下图所示
Mybatis源码解读(Spring整合篇)
是不是觉着MapperRegistry有点眼熟?没错,Configuration类里定义了这个,负责注册Mapper,同时提供了获取代理的方法
Mybatis源码解读(Spring整合篇)
也就是我们的MapperProxyFactory,MapperProxyFactory会返回带有MapperProxy处理器的JDK动态代理
Mybatis源码解读(Spring整合篇)
MapperProxy处理器里又会调用MapperMethod来结合Configuration缓存的XML定义,最终完成绑定
Mybatis源码解读(Spring整合篇)
Mybatis的工作完成了,那如何和spring整合的呢?现在Mybatis把spring的代理的事情做完了,可是spring容器里的其它Bean可不认Mybatis的代理啊,不是同一个父母,没有血缘关系,这可咋整?也就是我们需要把Mybatis生成的代理和Spring容器联系起来
Mybatis源码解读(Spring整合篇)
让其它的Bean认可这个代理。ok,我们需要注册到spring容器里,Mybatis有个注解
Mybatis源码解读(Spring整合篇)
这是整合的核心,添加了MapperScannerRegistrar注册器,注册器添加了MapperScannerConfigurer的Bean定义,MapperScannerConfigurer又干了件大事,使用ClassPathMapperScanner去添加我们Mapper的接口Bean定义去了,这里添加的Mapper接口Bean定义是MapperFactoryBean,又是一个FactoryBean的实现,毕竟这里的Mapper接口实现是Mybatis做的,可以依托FactoryBean的特性来桥接
Mybatis源码解读(Spring整合篇)
最后通过MapperRegistry来返回最终的代理,至此Mybatis生成的代理成功的注册到了Spring容器!

正文完
 
mysteriousman
版权声明:本站原创文章,由 mysteriousman 2022-06-04发表,共计881字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)