本文介紹了在同一類中創(chuàng)建Bean的Spring Autoire結(jié)果為:請(qǐng)求的Bean當(dāng)前處于創(chuàng)建錯(cuò)誤中*的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我知道這個(gè)錯(cuò)誤是不言而喻的,但是當(dāng)我將REST模板的設(shè)置從構(gòu)造函數(shù)刪除到@Autwire@Qualifier(“myRestTemplate”)私有RestTemplate REST模板時(shí),它起作用了。
我只想知道,如果同一個(gè)類具有我試圖自動(dòng)綁定的內(nèi)容的Bean定義,我如何在構(gòu)造函數(shù)中做到這一點(diǎn)?
org.springframework.beans.factory.BeanCurrentlyInCreationException:
創(chuàng)建名為‘xxx’的Bean時(shí)出錯(cuò):請(qǐng)求的Bean當(dāng)前在
創(chuàng)建:是否存在無法解析的循環(huán)引用?
@Component
public class xxx {
private RestTemplate restTemplate;
@Autowired
public xxx(@Qualifier("myRestTemplate") RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@Bean(name="myRestTemplate")
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
推薦答案
@Bean
常規(guī)@Component
批注類中的方法以稱為精簡(jiǎn)模式的方式處理。
我不知道你為什么要這么做。如果您的xxx
類控制RestTemplate
的實(shí)例化,則沒有太多理由不在構(gòu)造函數(shù)中自己進(jìn)行實(shí)例化(除非您打算將其公開給上下文的其余部分,但也有更好的解決方案)。
無論如何,為了讓Spring調(diào)用getRestTemplate
工廠方法,它需要一個(gè)xxx
的實(shí)例。若要?jiǎng)?chuàng)建xxx
的實(shí)例,它需要調(diào)用其構(gòu)造函數(shù),該構(gòu)造函數(shù)需要RestTemplate
,但您的RestTemplate
當(dāng)前正在構(gòu)造中。
您可以通過設(shè)置getRestTemplate
static
來避免此錯(cuò)誤。
@Bean(name="myRestTemplate")
public static RestTemplate getRestTemplate() {
return new RestTemplate();
}
在這種情況下,Spring不需要xxx
實(shí)例來調(diào)用getRestTemplate
工廠方法。
這篇關(guān)于在同一類中創(chuàng)建Bean的Spring Autoire結(jié)果為:請(qǐng)求的Bean當(dāng)前處于創(chuàng)建錯(cuò)誤中*的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,