首先定义MapperScan

MapperScan会导入MapperScanRegistrar。这个类很重要。这个类注意是把path下的bean扫描的定义definition扫描进来。


这个register方法是什么时候执行的?
由于它是imports进来的,项目启动后configurationclass parse的时候会把imports注释里面的类放到Map

configurationclass reader的时候专门有一步来处理这个Map,遍历这个map会调用这个Register对象的registerBeanDefinitions 方法。





scan的时候的细节:

Mapper类的beanclass设置为MapperFactoryBean。FactoryBean是一种特殊的bean。

MapperFactoryBean会重载getObject方法。这样对Mapper类的实例就委托给了这个方法。这个方法会生成代理。最终这个mapper对象是MapperProxy,mapperProxy调用methodProxy。
总结:mybatis主要用到imports功能
@Import(MapperScannerRegistrar.class)
configurationClass解析的时候会把Register类固定写死getImportBeanDefinitionRegistrars去执行。ImportResource和ImoprtRegister会单独处理。
loadBeanDefinitionsFromImportedResources(configClass.getImportedResources()); loadBeanDefinitionsFromRegistrars(configClass.getImportBeanDefinitionRegistrars());
把path下的bean都交给RegisterBean单独按mybatis的业务客制化解析。




![[NOIP2012 提高组] 借教室](https://img-blog.csdnimg.cn/656c6ff7839c415bb0dda6d515c9e85a.png)














