首先定义MapperScan
MapperScan会(Import)导入MapperScanRegistrar。下文会讲到这个import什么时候被解析,这个类很重要。这个类主要功能是扫描path下的bean定义(definition)扫描进来。
Register 负责扫描bean,就是扫描那些mapper接口。
doScan方法(核心方法)
这个register方法是什么时候执行的?
上文说过由于它是注释类上imports进来的,项目启动后被@Configuration的类都会被configurationclasspostprocesor parse。解析的时候会把imports注释里面的类放到Map
先Parse class
处理类上的Import标签
把Register放到Map,等待调用
configurationclasspostprocessor reader方法的时候专门有一步来处理这个Map,遍历这个map会调用循环调用所有Register对象的registerBeanDefinitions 方法。
调用register
这样scan的时候最重要的一步是把mapper接口的beanclass设置成这个factorybean.可以想象成一个代理:
Mapper类的beanclass设置为MapperFactoryBean。FactoryBean是一种特殊的bean。
MapperFactoryBean会重载getObject方法。这样对Mapper类的实例就委托给了这个方法。这个方法会生成代理。最终这个mapper对象是MapperProxy,mapperProxy调用methodProxy。
总结:mybatis主要用到imports功能
@Import(MapperScannerRegistrar.class)
configurationClass解析的时候会把Register类固定写死getImportBeanDefinitionRegistrars去执行。ImportResource和ImoprtRegister会单独处理。文章来源:https://www.toymoban.com/news/detail-480829.html
loadBeanDefinitionsFromImportedResources(configClass.getImportedResources()); loadBeanDefinitionsFromRegistrars(configClass.getImportBeanDefinitionRegistrars());
把path下的bean都交给RegisterBean单独按mybatis的业务客制化解析。文章来源地址https://www.toymoban.com/news/detail-480829.html
到了这里,关于mybatis 简单明了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!