2 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
Spring 只會(huì)在實(shí)例化 bean 之后或?qū)嵗瘯r(shí)注入依賴項(xiàng)(取決于是否使用構(gòu)造函數(shù)注入)。MyService但是,您現(xiàn)在在初始化 bean 之前發(fā)生的字段初始化期間訪問依賴項(xiàng)。因此,它無法MyService在字段初始化期間訪問,因?yàn)樗形醋⑷搿?/p>
您可以通過更改為routingKeys同時(shí)在構(gòu)造函數(shù)中使用構(gòu)造函數(shù)注入和初始化來簡(jiǎn)單地修復(fù)它:
@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();
}
}
或者簡(jiǎn)單地說:
@Autowired
public RabbitConfiguration(MyService myService){
this.myService = myService
this.routingKeys = myService.getRoutingKeys();
}

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
@Bean
我建議通過任何需要它的創(chuàng)建方法來注入服務(wù):
@Bean public MyBean create(MyService myService)
然后將服務(wù)傳遞給writeRoutingKeys(MyService myService)
方法進(jìn)行相應(yīng)的處理。
根據(jù)文檔:
@Configuration 類在上下文初始化期間很早就被處理,強(qiáng)制以這種方式注入依賴項(xiàng)可能會(huì)導(dǎo)致意外的提前初始化。只要有可能,就如上例那樣使用基于參數(shù)的注入。
添加回答
舉報(bào)