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处理的时候就被过滤掉了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值