mybatis集成到spring的入口及即系过程
- spring bean工厂的入口
- 接入mybatis
- 解析过程
- 1)mybait虽然在spring的配置文件增加的注解是@MapperScan("***"),但是在注解MapperScan内进行了@Import({MapperScannerRegistrar.class})导入,而在spring源码的bean工厂的初始化过程中,其org.springframework.context.annotation.ConfigurationClassParser#doProcessConfigurationClass方法的org.springframework.context.annotation.ConfigurationClassParser#processImports逻辑中的org.springframework.context.annotation.ConfigurationClassParser#getImports,会递归获取所有加在config上的所有注解及其内部的注解。所以此处MapperScannerRegistrar会被获取到并进行解析,放置在importBeanDefinitionRegistrars变量中。
- 2)解析Import导入数据的方法:org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader#loadBeanDefinitions,该方法做三件事情1)解析@Bean注解的方法 2)解析@ImportSelector注解的类 3)解析ImportBeanDefinitionRegistrar注解的类
- 4)进入mybatis的解析过程
spring bean工厂的入口
增加了@Configuration注解的配置文件,我们简称为config
接入mybatis
在config文件增加注解@MapperScan,或者增加注解@Import({MapperScannerRegistrar.class})
解析过程
我们以在config文件增加@MapperScan为例进行调试,
1)mybait虽然在spring的配置文件增加的注解是@MapperScan("***"),但是在注解MapperScan内进行了@Import({MapperScannerRegistrar.class})导入,而在spring源码的bean工厂的初始化过程中,其org.springframework.context.annotation.ConfigurationClassParser#doProcessConfigurationClass方法的org.springframework.context.annotation.ConfigurationClassParser#processImports逻辑中的org.springframework.context.annotation.ConfigurationClassParser#getImports,会递归获取所有加在config上的所有注解及其内部的注解。所以此处MapperScannerRegistrar会被获取到并进行解析,放置在importBeanDefinitionRegistrars变量中。