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 注解