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

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

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

循環(huán)依賴

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

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

原因

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

解決方法

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

    Spring Cache是Spring提供的一種緩存抽象機(jī)制,旨在通過簡化緩存操作來提高系統(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ì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下,希望能給您帶來幫助
    2021-06-06
  • Java+MyBatis+MySQL開發(fā)環(huán)境搭建流程詳解

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

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

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

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

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

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

    Java中的RPC框架Dubbo原理和機(jī)制詳解

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

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

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

最新評論

桐乡市| 亚东县| 亚东县| 巴南区| 荔波县| 外汇| 临猗县| 寻乌县| 博湖县| 西乌| 安义县| 台安县| 昌平区| 龙海市| 台中市| 渑池县| 屏东市| 林芝县| 图们市| 耿马| 阳春市| 华坪县| 安化县| 大化| 广丰县| 澄城县| 富蕴县| 连南| 平江县| 嘉峪关市| 嘉峪关市| 安西县| 临泽县| 石渠县| 信丰县| 泗阳县| 临安市| 洪湖市| 博野县| 丹巴县| 沽源县|