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 類在上下文初始化期間很早就被處理,強制以這種方式注入依賴項可能會導致意外的提前初始化。只要有可能,就如上例那樣使用基于參數的注入。
添加回答
舉報