踩坑记2018-7-30B:SpringCloud下mybatis DAO实例化失败

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z28126308/article/details/81289722


Field baseDAO in per.wilson.distributed.dao.service.BaseServiceImpl required a bean of type 'per.wilson.distributed.dao.BaseDAO' that could not be found.

required a bean of type xxxx,初眼看是一个很普通的错误,一般来说都是DAO扫描配置错误,但出现在集成中则显得耐人寻味了。本人出现该错误的集成环境:spring-cloud,mybatis-plus,我想也只能解决该环境下的bean not be found问题。

通过依赖排错确认了是由于spring-cloud依赖的导入导致了Bean的生成乱序。个人原来用的spring与mybatis的集成扫描类是org.mybatis.spring.mapper.MapperScannerConfigurer,去除所有spring-cloud的依赖后service可以找到对应的DAO进行注入,但加回Spring Cloud的依赖后就显示找不到Bean的错误了,原因只有2个:1、mapperScanner没有进行生成DAO(已确保mapperScanner生成成功);2、Spring的bean初始化乱序。由于无法对不了解Spring Cloud的初始化过程,所以先对Scanner进行了解找替代方案。左图是关于扫描的类:

尝试了用ClassPathMapperScanner与MapperScan替代MapperScannerConfigurer,结果是MapperScan可以成功生成DAO,原入坑配置如下图:


    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("per.wilson.distributed");
        return mapperScannerConfigurer;
    }

出坑配置:

@MapperScan("per.wilson.distributed.dao")

这也反应了注解的配置解析与BBean的配置解析不同

猜你喜欢

转载自blog.csdn.net/z28126308/article/details/81289722