2 回答
TA贡献1817条经验 获得超6个赞
Spring 只会在实例化 bean 之后或实例化时注入依赖项(取决于是否使用构造函数注入)。MyService但是,您现在在初始化 bean 之前发生的字段初始化期间访问依赖项。因此,它无法MyService在字段初始化期间访问,因为它尚未注入。
您可以通过更改为routingKeys同时在构造函数中使用构造函数注入和初始化来简单地修复它:
@Configuration
public class RabbitConfiguration {
private List<String> routingKeys ;
private MyService myService;
@Autowired
public RabbitConfiguration(MyService myService){
this.myService = myService
this.routingKeys = writeRoutingKeys();
}
private List<String> writeRoutingKeys() {
return myService.getRoutingKeys();
}
}
或者简单地说:
@Autowired
public RabbitConfiguration(MyService myService){
this.myService = myService
this.routingKeys = myService.getRoutingKeys();
}
TA贡献1900条经验 获得超5个赞
@Bean
我建议通过任何需要它的创建方法来注入服务:
@Bean public MyBean create(MyService myService)
然后将服务传递给writeRoutingKeys(MyService myService)
方法进行相应的处理。
根据文档:
@Configuration 类在上下文初始化期间很早就被处理,强制以这种方式注入依赖项可能会导致意外的提前初始化。只要有可能,就如上例那样使用基于参数的注入。
添加回答
举报