项目中的Mapper使用,整体调整了maven依赖,发现注解@Mapper 的类找不到bean,一开始以为是通用Mapper 和@Mapper 不兼容,或者mybatis-spring 和tk.mybatis 加载顺序导致的不生效问题
最终查看maven依赖,发现当前的module没有引用到mybatis,导致MybatisAutoConfiguration直接没有生效,也就没有自动完成mybatis-spring Mapper bean的初始化
解决方法
重新梳理maven module的依赖,验证mybatis引入成功后,即可。
这样,MybatisAutoConfiguration 才能生效,才会把@Mapper 注解的bean扫描到。
Mapper注解解析实现
关键类:org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration.AutoConfiguredMapperScannerRegistrar
作用:默认扫描与SpringBoot相同的包路径,需要声明式的指定路径,可以使用@MapperScan,如果使用这个注解,会与默认的扫描注册类互斥。
// AutoConfiguredMapperScannerRegistrar 实现默认策略扫描和Mapper注册
@Import({ AutoConfiguredMapperScannerRegistrar.class })
// 与@MapperScan作用互斥
@ConditionalOnMissingBean(MapperFactoryBean.class)
public static class MapperScannerRegistrarNotFoundConfiguration {
}
// 与SpringBoot相同的包路径获取
List<String> packages = AutoConfigurationPackages.get(this.beanFactory);