前言
在学习之前需要复习以下知识:
- 动态代理
- JDBC操作
- 了解Spring容器的创建流程
一、向Spring容器中注入Mapper接口代理对象
1.注册MapperScannerConfigurer
组件的 BeanDefinition ,并在void registerBeanDefinitions
方法中为MapperScannerConfigurer
组件设置@MapperSacn
注解中所配置的属性信息;
MapperScannerRegistrar.java
2.MapperScannerConfigurer
组件实现了BeanDefinitionRegistryPostProcessor
(spring扩展接口),public void postProcessBeanDefinitionRegistry()
方法 - 用于加载用户的自定义配置(一般可以在配置文件中配置多数据源的sqlSessionFactory)以及它会查找类路径下的映射器并自动将它们创建成 MapperFactoryBean(MapperFactoryBean 会将Mapper接口代理对象注入到Spring容器中)。
MapperScannerConfigurer.java
在上面的后置处理器方法中创建了ClassPathMapperScanner
对象,并调用了scanner.scan()
方法对指定映射包下的Mapper接口进行扫描。
3.ClassPathMapperScanner
重写了父类的doScan()
方法,调用父类ClassPathBeanDefinitionScanner
的doScan()
方法获取到指定包下的所有 Mapper接口的BeanDefinition并返回,并且注册了Mapper接口的BeanDefinition。
ClassPathBeanDefinitionScanner.java