1、问题描述
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.demo.dao.UseDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1301) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1047) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533) ... 24 more
2、问题分析
无法注入Dao中的Bean!
解决分析后来经研究发现,SpringBoot项目的Bean装配默认规则是根据Application.java类所在的包位置从上往下扫描。
“Application类”是指SpringBoot项目入口类。这个类的位置很关键:如果Application类所在的包为:com.baidu.demo,则只会扫描com.baidu.demo包及其所有子包,如果service、dao和mapper所在包不在com.baidu.demo及其子包下,则不会被扫描!
3、解决办法
所以需在application启动类中加上一下代码即可解决问题
@ComponentScan(value = "com.baidu.demo.*")//加上你项目的service、dao或mapper所在文件位置即可
@SpringBootApplication