Error creating bean with name 'com.example.SpringBootJdbcDemoApplication.SpringBootJdbcDemoApplicat
在Spring Boot测试的时候,报类似错误:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.example.SpringBootJdbcDemoApplication.SpringBootJdbcDemoApplication': Unsatisfied dependency expressed through field 'userRepository': No qualifying bean of type [com.example.repositories.UserRepository] found for dependency [com.example.repositories.UserRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.example.repositories.UserRepository] found for dependency [com.example.repositories.UserRepository]: 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.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
报错的根本原因是:
无法注入bean
在idea的提示栏可以发现@Autowired注解旁边有:could not wired.no beans of ‘’type found
后来经研究发现,SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!
“Application类”是指SpringBoot项目入口类。这个类的位置很关键:
修改后如下。
自动生成的目录结构没有任何问题
主程序入口为DemoApplication,测试类为DemoApplicationTests,这两个类在同名包下面
SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!
说第二遍了,白话就是,只能扫描到主程序入口同级包或者是子包。其余的无法扫描到!只要将需要注入的bean放在com.example.demo或者是它的子包中,就可以扫描到了。