亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入理解Spring中的循環依賴

發布時間:2020-10-19 03:54:40 來源:腳本之家 閱讀:127 作者:BeginnerH 欄目:編程語言

循環依賴

 定義: 循環依賴就是循環引用,就是兩個或多個Bean相互之間的持有對方,比方CircularityA引用CircularityB,CircularityB引用CircularityC,CircularityC引用CircularityA。形成一個環狀引用關系。

深入理解Spring中的循環依賴

在使用Spring時,如果主要采用基于構造器的依賴注入方式,則可能會遇到循環依賴的情況,簡而言之就是Bean A的構造器依賴于Bean B,Bean B的構造器又依賴于Bean A。在這種情況下Spring會在編譯時拋出BeanCurrentlyInCreationException。

Class A

@Component
public class ClassA {
 private ClassB classB;
 @Autowired
 public ClassA(ClassB classB) {
  this.classB = classB;
 }

 public void printClass() {
  System.out.println("Class A = " + this);
  System.out.println("Class B = " + classB);
 }
}

Class B

@Component
public class ClassB {
 private ClassA classA;
 @Autowired
 public ClassB(ClassA classA) {
  this.classA = classA;
 }

 public void printClass() {
  System.out.println("Class A = " + classA);
  System.out.println("Class B = " + this);
 }
}

測試

@ContextConfiguration(classes = {ClassA.class, ClassB.class})
@RunWith(SpringRunner.class)
public class MyTest {
 @Autowired
 private ClassA classA;
 @Autowired
 private ClassB classB;

 @Test
 public void name() {
  classA.printClass();
  classB.printClass();
 }
}

原因

這時候運行測試就會發現拋出了BeanCurrentlyInCreationException異常。產生這種情況的原因是,Spring在創建Bean時,會首先實例化對象,然后再注入依賴。假設Spring首先創建Class A,那么就會發現在構造器里有Class B的依賴,所以就會轉去創建Class B,又在Class B的構造器里發現了對Class A的依賴,而此時Class A是還未初始化完的,因此又會轉去創建Class A,這樣就陷入了死循環。

解決方法

換成基于setter的依賴注入即可解決這個問題。因為基于setter的依賴注入會首先調用默認構造函數來實例化對象,然后再調用setter實現依賴注入。這樣在對象實例化的階段就沒有了任何依賴,因此Class A實例化完成后再調用Class B,Class B實例化完成后開始設值,而這時Class A已經是實例化完成了的,所以可以成功引用到Class A。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

同江市| 孟州市| 新竹县| 婺源县| 万安县| 太保市| 武平县| 清水河县| 个旧市| 竹溪县| 西吉县| 来凤县| 江城| 漳州市| 荣成市| 普宁市| 达州市| 遵义县| 尼玛县| 绵竹市| 水富县| 祁东县| 金寨县| 梨树县| 库尔勒市| 潞西市| 乐山市| 聂拉木县| 大荔县| 双桥区| 辉县市| 于田县| 章丘市| 六枝特区| 巩义市| 九龙城区| 宜丰县| 普安县| 河东区| 莱州市| 四川省|