1.迴圈依賴就是迴圈引用,就是兩個或多個bean相互之間的持有對方,比如circlea引用circleb,circle引用circlec,circlec引用circlea,則它們最終反映了乙個環。
此處不是迴圈呼叫,迴圈呼叫是方法之間的迴圈呼叫。迴圈呼叫是無法解決的,除非有終結條件,否則就是死迴圈,最終導致記憶體溢位錯誤。
2.spring解決迴圈依賴。
spring有兩種迴圈依賴:構造器迴圈依賴和setter迴圈依賴。
迴圈引用類定義:
public class testa {
private testb testb;
public void a() {
testb.b();
public testb gettestb() {
return testb;
public void settestb(testb testb) {
this.testb = testb;
public class testb {
private testc testc;
public void b() {
testc.c();
public testc gettestc() {
return testc;
public void settestc(testc testc) {
this.testc = testc;
public class testc {
private testa testa;
public void c(){
testa.a();
public testa gettesta() {
return testa;
public void settesta(testa testa) {
this.testa = testa;
(1)、構造器迴圈依賴
表示通過構造器注入構成的迴圈依賴,此依賴是無法解決的,只能丟擲beancurrentlyincreationexception異常表示迴圈依賴。
spring容器將每乙個正在建立的bean識別符號放在乙個「當前建立bean池」中,bean識別符號在建立過程中將一直保持在這個池中,因此如果在建立bean的過程中發現自己已經在「當前建立bean池」裡,將丟擲beancurrentlyincreationexception異常表示迴圈依賴,
當前建立的bean在池中刪除。
(2)、setter迴圈依賴
表示通過setter注入方式構成的迴圈依賴。對於setter注入造成的依賴是通過spring容器提前暴露剛完成構造器注入但未完成其他步驟(如setter注入)的bean來完成的,而且只能解決單例作用域的bean迴圈依賴。通過提前暴露乙個單例工廠,從而使其他bean能
引用到該bean。
Springboot迴圈依賴
如何解決迴圈依賴 最好的方法是重構 進行解耦 從網上搜尋了簡單的方法如下 第一種 專案解決用了這種方式 autowired lazy true private classa classa autowired lazy true private classb classb 在你注入bean時,在互相依...
spring 迴圈依賴
構造器依賴無法解決,使用 快取解決field屬性依賴。a的屬性依賴b,b的屬性依賴a 建立a,設定依賴屬性b,發現b沒有建立,建立b,設定依賴屬性a,先從一級快取singletonobjects中去獲取。如果獲取到就直接return 如果獲取不到或者物件正在建立中 issingletoncurren...
spring迴圈依賴
關於spring迴圈依賴網上有太多的例子,本文只是簡單的記錄一下。本文預設讀者熟悉spring核心之一控制反轉和依賴注入 在我們的開發過程中,我們基本上對迴圈依賴是無感且不用去考慮如何解決。如上圖中classa使用屬性注入了classb,classb使用屬性注入了classa。如上圖這就是產生了迴圈...