mapper 接口怎么被spring管理的
- 1.通过 @MapperScan 扫描到对应的接口
- 2.对接口进行动态代理,代理类做到的事情就是拿到sql,连接数据库,执行sql
- 3.通过spring扩展机制
FactoryBean
将代理对象交给spring管理
为什么 mapper 不用注解 @Component 也能生效
-
ClassPathMapperScanner
实现 spring
的ClassPathBeanDefinitionScanner
- 2.在
registerFilters
方法中做了下面这件事情,这个是spring的ClassPathBeanDefinitionScanner
在doScan
方法中会判断是否需要包装成BeanDifition
,这边都直接返回 true,表示,都需要,所以会把@MapperSacn 配置的包全部扫描进去
addIncludeFilter(new TypeFilter() {
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
return true;
}
});
- 3.所以在 mapper 接口上根本就不用配置 @Component 注解