Mybatis通过Spring完成代理类注入的流程分析
流程分析
首先,使用mybatis的时候会定义mapper接口的基础包,一般我们会用@MapperScanner这个注解,来看下这个注解
文章图片
来看下这个MapperScannerRegistrar类
文章图片
这个类实现了ImportBeanDefinitionRegistrar也就是spring注册beanDefined时候需用到,这个重写了一下,这个方法里,前面的话是一些基础属性的赋值,最重要的是这个方法
文章图片
根据basePackages去进行扫描,来跟下这个方法
文章图片
首先会调用父类生成一个BeanDefinitionHolder的集合,重点是这个方法processBeanDefinitions,而在这个方法里,重中之重的是这个
文章图片
很形象,偷换概念了,将这个bean的实现类换成了MapperFactoryBean,它肯定实现了FactoryBean的接口并实现了getObject这个方法,getObject也就是我们实例化bean获取bean的途径,继续往下跟,果然
文章图片
之后是这个
文章图片
之后是这个
文章图片
调用了MapperRegistry,来看下
文章图片
最后到了MapperProxyFactory,来看下
文章图片
按照如下的步骤进行调用的,最后通过jdk动态代理的方法,绑定mapper接口的最终实现是mapperProxy
总结
关于mybatis是如何将代理类绑定到mapper接口的,大概流程是这样,通过实现ImportBeanDefinitionRegistrar,重新定义这个beanClass为
MapperFactoryBean,这个类的话是一个FactoryBean有自己的getObject方法,通过调用当前对象的SqlSession对象的getMapper方法,转而到从这个对象的configuration对象中getMapper,进而从这个对象的mapperRegistry获取,而在MapperRegistry使用mapperProxyFactory实例化,通过代理绑定MapperProxy为这个接口的真正实现类,之后的话,我们调用mapper,其实就是调用了mapperProxy,之后的流程上一张已经提过
【Mybatis通过Spring完成代理类注入的流程分析】到此这篇关于Mybatis通过Spring完成代理类注入的流程分析的文章就介绍到这了,更多相关Mybatis Spring代理类注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- gitlab|gitlab 通过备份还原 admin/runner 500 Internal Server Error
- 2018-07-09|2018-07-09 Spring 的DBCP,c3p0