日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Spring:SpringIOC循環(huán)依賴問題

一、什么是循環(huán)依賴

循環(huán)依賴其實就是循環(huán)引用,也就是兩個或者兩個以上的 Bean 互相持有對方,最終形成閉環(huán)。比如A依賴于B,B依賴于C,C又依賴于A。

創(chuàng)新互聯(lián)公司是一家從事企業(yè)網(wǎng)站建設(shè)、做網(wǎng)站、成都做網(wǎng)站、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計制作的專業(yè)網(wǎng)站設(shè)計公司,擁有經(jīng)驗豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨特的設(shè)計風(fēng)格。自公司成立以來曾獨立設(shè)計制作的站點上1000+。

注意,這里不是函數(shù)的循環(huán)調(diào)用,是對象的相互依賴關(guān)系。循環(huán)調(diào)用其實就是一個死循環(huán),除非有終結(jié)條件。

Spring中循環(huán)依賴場景有:

  • 構(gòu)造器的循環(huán)依賴(構(gòu)造器注入)
  • Field 屬性的循環(huán)依賴(set注入)

構(gòu)造器的循環(huán)依賴問題無法解決,只能拋出BeanCurrentlyInCreationException 異常;在解決屬性循環(huán)依賴時,spring采用的是提前暴露對象的方法。

二、循環(huán)依賴處理機制

  • 單例 bean 構(gòu)造器參數(shù)循環(huán)依賴(無法解決)
  • prototype 原型 bean循環(huán)依賴(無法解決)

對于原型bean的初始化過程中不論是通過構(gòu)造器參數(shù)循環(huán)依賴還是通過setXxx方法產(chǎn)生循環(huán)依賴,Spring都會直接報錯處理。

AbstractBeanFactory.doGetBean()方法:

在獲取bean之前如果這個原型bean正在被創(chuàng)建則直接拋出異常。原型bean在創(chuàng)建之前會進行標記這個beanName正在被創(chuàng)建,等創(chuàng)建結(jié)束之后會刪除標記。

總結(jié):Spring 不支持原型 bean 的循環(huán)依賴。

單例bean通過setXxx或者@Autowired進行循環(huán)依賴

Spring 的循環(huán)依賴的理論依據(jù)基于 Java 的引用傳遞,當(dāng)獲得對象的引用時,對象的屬性是可以延后設(shè)置的,但是構(gòu)造器必須是在獲取引用之前。

Spring通過setXxx或者@Autowired方法解決循環(huán)依賴其實是通過提前暴露一個ObjectFactory對象來完成的,簡單來說ClassA在調(diào)用構(gòu)造器完成對象初始化之后,在調(diào)用ClassA的setClassB方法之前就把ClassA實例化的對象通過ObjectFactory提前暴露到Spring容器中。

  • Spring容器初始化ClassA通過構(gòu)造器初始化對象后提前暴露到Spring容器。
  • ClassA調(diào)用setClassB方法,Spring首先嘗試從容器中獲取ClassB,此時ClassB不存在Spring容器中。
  • Spring容器初始化ClassB,同時也會將ClassB提前暴露到Spring容器中。
  • classB調(diào)用setClassA方法,Spring從容器中獲取ClassA ,因為第一步中已經(jīng)提前暴露了ClassA,因此可以獲取到ClassA實例。
  • ClassA通過spring容器獲取到ClassB,完成了對象初始化操作。
  • 這樣ClassA和ClassB都完成了對象初始化操作,解決了循環(huán)依賴問題。

分享標題:Spring:SpringIOC循環(huán)依賴問題
URL地址:http://www.dlmjj.cn/article/cddcohc.html