最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Spring中的循環(huán)依賴

 更新時間:2018年05月17日 10:10:26   作者:BeginnerH  
Spring在注入bean的時候會做循環(huán)依賴檢查,下面這篇文章主要給大家介紹了關(guān)于Spring中循環(huán)依賴的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧

循環(huán)依賴

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

在使用Spring時,如果主要采用基于構(gòu)造器的依賴注入方式,則可能會遇到循環(huán)依賴的情況,簡而言之就是Bean A的構(gòu)造器依賴于Bean B,Bean B的構(gòu)造器又依賴于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();
 }
}

原因

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

解決方法

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Java并發(fā)編程同步器CountDownLatch

    Java并發(fā)編程同步器CountDownLatch

    這篇文章主要介紹了Java并發(fā)編程同步器CountDownLatch,文章基于Java并發(fā)編程的相關(guān)資料展開具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • Java 簡化正則表達(dá)式的使用

    Java 簡化正則表達(dá)式的使用

    本篇文章主要介紹了Java 簡化正則表達(dá)式使用的相關(guān)知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • SpringCache輕松啟用Redis緩存的全過程

    SpringCache輕松啟用Redis緩存的全過程

    Spring Cache是Spring提供的一種緩存抽象機制,旨在通過簡化緩存操作來提高系統(tǒng)性能和響應(yīng)速度,本文將給大家詳細(xì)介紹SpringCache如何輕松啟用Redis緩存,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-07-07
  • SpringBoot集成redis的示例代碼

    SpringBoot集成redis的示例代碼

    redis想必小伙伴們即使沒有用過,也是經(jīng)常聽到的,在工作中,redis用到的頻率非常高,本文主要介紹了SpringBoot集成redis,感興趣的可以參考一下
    2021-10-10
  • 新手Hadoop安裝 環(huán)境搭建

    新手Hadoop安裝 環(huán)境搭建

    這篇文章主要介紹了Hadoop的安裝與環(huán)境搭建教程圖解,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下,希望能給您帶來幫助
    2021-06-06
  • Java+MyBatis+MySQL開發(fā)環(huán)境搭建流程詳解

    Java+MyBatis+MySQL開發(fā)環(huán)境搭建流程詳解

    Java的MyBatis框架提供了強大的數(shù)據(jù)庫操作支持,這里我們先在本地的開發(fā)環(huán)境中上手,來看一下Java+MyBatis+MySQL開發(fā)環(huán)境搭建流程詳
    2016-06-06
  • IntelliJ IDEA 2021.1 推出語音、視頻功能,邊寫代碼邊聊天(功能超級強大)

    IntelliJ IDEA 2021.1 推出語音、視頻功能,邊寫代碼邊聊天(功能超級強大

    這篇文章主要介紹了IntelliJ IDEA 2021.1 推出語音、視頻功能,邊寫代碼邊聊天(功能超級強大),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Java實現(xiàn)圖片裁剪功能的示例詳解

    Java實現(xiàn)圖片裁剪功能的示例詳解

    這篇文章主要介紹了如何利用Java實現(xiàn)圖片裁剪功能,可以將圖片按照自定義尺寸進(jìn)行裁剪,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-01-01
  • Java中的RPC框架Dubbo原理和機制詳解

    Java中的RPC框架Dubbo原理和機制詳解

    這篇文章主要介紹了Java中的RPC框架Dubbo原理和機制詳解,Dubbo 是一款Java RPC框架,致力于提供高性能的 RPC 遠(yuǎn)程服務(wù)調(diào)用方案,作為主流的微服務(wù)框架之一,Dubbo 為開發(fā)人員帶來了非常多的便利,需要的朋友可以參考下
    2024-01-01
  • java實現(xiàn)圖片的上傳與展示實例代碼

    java實現(xiàn)圖片的上傳與展示實例代碼

    這篇文章主要給大家介紹了關(guān)于java實現(xiàn)圖片的上傳與展示的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12

最新評論

马山县| 福贡县| 龙南县| 阜阳市| 丁青县| 喜德县| 紫云| 古蔺县| 宁乡县| 桂林市| 电白县| 光泽县| 承德县| 陇西县| 林芝县| 同德县| 上林县| 孟津县| 陇西县| 顺平县| 公主岭市| 永定县| 杭锦后旗| 湖州市| 莫力| 铜川市| 竹山县| 南安市| 洛川县| 尉氏县| 金川县| 略阳县| 织金县| 莱州市| 休宁县| 前郭尔| 吉水县| 建湖县| 西乌| 万山特区| 同江市|