文章所使用容器为springboot。
1.mybatis入口
入口一 MybatisAutoConfiguration:
如果上下文中不存在MapperScannerConfigurer.class,则加载MybatisAutoConfiguration.AutoConfiguredMapperScannerRegistrar.class,该类实现了spring的ImportBeanDefinitionRegistrar接口,会在容器初始化阶段调用registerBeanDefinitions方法,注册MapperScannerConfigurer.class
@Configuration
@Import({
MybatisAutoConfiguration.AutoConfiguredMapperScannerRegistrar.class})
@ConditionalOnMissingBean({
MapperFactoryBean.class, MapperScannerConfigurer.class})
public static class MapperScannerRegistrarNotFoundConfiguration implements InitializingBean {
}
public static class AutoConfiguredMapperScannerRegistrar implements BeanFactoryAware, ImportBeanDefinitionRegistrar {
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
...
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MapperScannerConfigurer.class);
builder.addPropertyValue("processPropertyPlaceHolders", true);
builder.addPropertyValue("annotationClass", Mapper.class);
builder.addPropertyValue("basePackage", StringUtils.collectionToCommaDelimitedString(packages)