我在Spring boot 1.4.0中遇到过Spring这种奇怪的行为。 Spring基本上告诉我它不能将bean自动装入资源,因为它没有发现自己的依赖。
UnsatisfiedDependencyException: Error creating bean with name 'restResource': Unsatisfied dependency expressed through field
'fooService': No qualifying bean of type [**aaa.FooService**] found for dependency [**aaa.FooService**]
FooService在资源中自动装配。当我@Autowire进入创建资源的@Configuration文件时,会按预期注入它。
这有效:
public class ServiceMocksRestConfig extends WebMvcConfigurerAdapter {
@Autowired
private FooService fooService; //instance here
@Bean
public FooResource fooResource() {
return new FooResource(); // debuger stop here
}
//调试步骤进入
@RestController
public class FooResource {
@Autowired
private FooService fooService; //bang
有人有任何想法,可能出了什么问题?
有趣的是,当我使用启动弹簧运行器从测试运行应用程序时,它也可以工作(一切,包括此资源)
答案 0 :(得分:0)
我今天成功找到了根本原因。它的Spring Boot devtools - 更确切地说是它的拆分类加载器(相关bug:https://github.com/spring-projects/spring-boot/issues/3316)
当子REST @Configuration即将@Autowire FooService
时,我在ListableBeanFactory中放置一个断点并且做了FooService instanceof FooServiceInterface,它返回false。 当我做FooService.class.getClassLoader()和beanfactory.getBean(" fooService" / 不能在这里使用类,会触发未找到异常 /)。getClass()。getClassloader ()这些是不同的(一个是AppClassLoader,另一个是devtools可重启的类加载器)。
解决方案:从类路径中删除boot devtools。
答案 1 :(得分:0)
确切原因是,在运行时尝试将$data_string = array(
"ProductDc"=>array(
"product_name" => "Electronics",
"price" => "200 usd"
),
"buyerDC"=>array(
"buyer_name" => "john mark",
"address" => "17 more strret"
)
);
自动装入FooService
时,Spring IOC容器内的类型FooService
没有初始化bean。
它可能是由于发展中的不同错误造成的。这个article解决了可能导致此问题的每一个可能的错误。