springboot项目启动时报错,提示不能注入dao层的bean,然后service层和controller层的注入的dao层的bean出错误

在SpringBoot+Mybatis+SpringMVC项目中,遇到启动时因无法找到DAO层Bean导致的异常。经过排查,问题并非@Mapper注解缺失、启动类与扫描包位置不正确,也非@MapperScan使用不当。最终通过在启动类上添加@MapperScan指定DAO层路径解决了问题,分析可能是SpringBoot默认扫描机制导致的扫描不到DAO层。分享这一经验,以便帮助遇到相同问题的开发者。

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘XXXController’: Unsatisfied dependency expressed through field ‘pp’; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘XXXService’: Unsatisfied dependency expressed through field ‘userTestDao’; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.example.dao.primary.XXXDao’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

先说下我的项目环境,springboot+mybatis+springmvc 其中数据源使用配置类的方式写的,想写一个简单的查询测试数据源配置是否正确

启动时报错的信息如上所示,昨天下午弄了一下午,在网上搜无非就是以下几种情况:
1.可能是因为dao层的接口没有使用@mapper注解或者@repository将这个接口声明为dao层,我的dao层的接口都用了@Mapper注解,所以这种方法对我这个项目没有作用
2.第二种说法是:检查springboot的启动类和要扫描包的类的位置,springboot启动类自动扫描的规则是默认规则是根据Application类所在的包位置从上往下扫描,它只能扫描到启动类同级或者这个包下所有子类的注解,比如说启动类的包是:com.example.caffe,这个启动类只能自动扫描到com.example.caffe和com.example.caffe.xx这个子类下的注解,我项目中的启动类和要扫描的类位置没有错,所以这个方法也没有效果。
3.在启动类上面加一个@MapperScan注解,把你要扫描的dao层的路径放进去:
如上图所示在这里插入图片描述
我昨天这样放启动还是有问题,今天就这样想把错误给截图下来,居然启动成功了、我昨天的解决方法也是加上@MapperScan注解,后面加上dao层的路径,但是放的位置不一样,昨天是放在数据源的配置类上面的,总之经测试,两种方法都可以,原因也在其他博客上面看到说过,不知道正确性怎样,好像是说springboot不能扫描到dao层,所以需要自己配置要扫描的dao层的路径,因为一个小问题,昨天下午弄了很久,所以今天总结下原因,希望也能给有同样错误的朋友一点点参考!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值