Spring中Mybatis配置@MapperScan后@Mappper失效

Spring中Mybatis配置@MapperScan后,@Mappper失效分析

在日常开发的过程中会发现在使用了@MapperScan后@Mapper就会失效,那么是什么原因导致的呢?

深入Spring源码,了解这二者加载的背后逻辑

首先看下@MapperScan这个,这个注解中还标记了一个@Import(MapperScannerRegistrar.class),那么在ConfigurationClassPostProcessor类中的processConfigBeanDefinitions方法中会加载到这个import进来的对象
@MapperScan这个注解可以添加到任何被Spring管理的bean上,都具有同样的效果

@Mapper这边的处理

org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$MapperScannerRegistrarNotFoundConfiguration

Springboot会从Spring.factories这个配置文件中预加载一些类并缓存起来。在扫描的时候会将包下的符合条件的bean扫描并注册到容器中,然后将预加载的bean也注册到容器中。这里面涉及一个先后问题,如果在bean上标记了@MapperScan那么这个类肯定是排在预加载之前,因为在处理的过程中首先是从包扫描中发现的类进行处理,然后再是spring.factories中的类。(这边知道就好了)那么在处理完@MapperScan后 会将引入这个类的类加入缓存中,用来甄别后面是否有重复的,那么就是在这将后面@Mapper处理的时候就被过滤掉了

你可能感兴趣的:(Mybatis,mybatis,spring,boot,spring,java)