1、MapperScannerConfigurer
它这里实现了 BeanDefinitionRegistryPostProcessor ,BeanDefinitionRegistryPostProcessor 是 BeanFactoryPostProcessor 的子类,是Spring 的扩展点之一,可以通过编码的方式修改、新增或者删除某些 Bean 的定义(BeanDefinition)。所以 MyBatis 就可以自己实现 bean 的注册了啊!
我们需要做的就是重写 postProcessBeanDefinitionRegistry() 方法,在这里面操作 bean
public class MapperScannerConfigurer implements BeanDefinitionRegistryPostProcessor,
InitializingBean, ApplicationContextAware, BeanNameAware {
@Override
// BeanDefinitionRegistry 提供了丰富的方法去操作 BeanDefiniton,包括注册,移除,判断...
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
if (this.processPropertyPlaceHolders) {
processPropertyPlaceHolders();
}
ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry);
scanner.setAddToConfig(this.addToConfig);
scanner.setAnnotationClass(this.annotationClass);
scanner.setMarkerInterface(this.markerInterface);
scanner.setSqlSessionFactory(this.sqlSessionFactory);
scanner.setSqlSessionTemplate(this.sqlSessionTemplate);
scanner.setSqlSessionFactoryBeanName(this.sqlSessionFactoryBeanName);
scanner.setSqlSessionTe