国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring怎么解決循環(huán)依賴問題?

這篇具有很好參考價(jià)值的文章主要介紹了Spring怎么解決循環(huán)依賴問題?。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.什么是循環(huán)依賴?

循環(huán)依賴是指一個(gè)或多個(gè)對象之間存在直接或間接的依賴關(guān)系,這種依賴關(guān)系構(gòu)成一個(gè)環(huán)形調(diào)用 , 舉個(gè)例子 : A 依賴B , B依賴C , C依賴A , 這樣就形成了循環(huán)依賴;

Spring怎么解決循環(huán)依賴問題?

?

2.spring對循環(huán)依賴的處理有三種情況:

①構(gòu)造器的循環(huán)依賴:這種依賴spring是處理不了的,直接拋出BeanCurrentlyInCreationException異常。
②單例模式下的setter循環(huán)依賴:通過"三級(jí)緩存”處理循環(huán)依賴。
③非單例循環(huán)依賴:無法處理。

三級(jí)緩存的執(zhí)行邏輯

  • 先從“第一級(jí)緩存”找對象,有就返回,沒有就找“二級(jí)緩存”
  • 找“二級(jí)緩存”,有就返回,沒有就找“三級(jí)緩存”
  • 找“三級(jí)緩存”,找到了,就獲取對象,放到“二級(jí)緩存”,從“三級(jí)緩存”移除

3.下面分析單例模式下的setter循環(huán)依賴如何解決

Spring的單例對象的初始化主要分為三步:

Spring怎么解決循環(huán)依賴問題?

(1)createBeanInstance:實(shí)例化,其實(shí)也就是調(diào)用對象的構(gòu)造方法實(shí)例化對象

(2)populateBean:填充屬性,這一步主要是多bean的依賴屬性進(jìn)行填充

(3)initializeBean:調(diào)用spring xml中的init 方法.

從上面講述的單例bean初始化步驟我們可以知道,循環(huán)依賴主要發(fā)生在第一,第二部.也就是構(gòu)造器循 環(huán)依賴和field循環(huán)依賴.

Spring怎么解決循環(huán)依賴問題?

?舉例:A的某個(gè)field或者setter依賴了B的實(shí)例對象,同時(shí)B的某個(gè)field或者setter依賴了A的實(shí)例對象”這種循環(huán)依賴的情況.

A首先完成了 初始化的第一步(createBeanINstance實(shí)例化),并且將自己提前曝光到singletonFactories中.

此時(shí)進(jìn)行初始化的第二步,發(fā)現(xiàn)自己依賴對象B,此時(shí)就嘗試去get(B),發(fā)現(xiàn)B還沒有被create,所以走 create流程,B在初始化第一步的時(shí)候發(fā)現(xiàn)自己依賴了對象A,于是嘗試get(A),嘗試一級(jí)緩存 singletonObjects(肯定沒有,因?yàn)锳還沒初始化完全),嘗試二級(jí)緩存earlySingletonObjects(也沒 有),嘗試三級(jí)緩存singletonFactories,由于A通過ObjectFactory將自己提前曝光了,所以B能夠通過 ObjectFactory.getObject拿到A對象(雖然A還沒有初始化完全,但是總比沒有好呀),B拿到A對象后順利 完成了初始化階段1,2,3,完全初始化之后將自己放入到一級(jí)緩存singletonObjects中.

此時(shí)返回A中,A此時(shí)能拿到B的對象順利完成自己的初始化階段2,3,最終A也完成了初始化,進(jìn)去了 一級(jí)緩存singletonObjects中,而且更加幸運(yùn)的是,由于B拿到了A的對象引用,所以B現(xiàn)在hold住的A對 象完成了初始化.文章來源地址http://www.zghlxwxcb.cn/news/detail-712301.html

到了這里,關(guān)于Spring怎么解決循環(huán)依賴問題?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring如何解決循環(huán)依賴問題

    循環(huán)依賴問題在Spring中主要有三種情況: (1)通過構(gòu)造方法進(jìn)行依賴注入時(shí)產(chǎn)生的循環(huán)依賴問題。 (2)通過setter方法進(jìn)行依賴注入且是在多例(原型)模式下產(chǎn)生的循環(huán)依賴問題。 (3)通過setter方法進(jìn)行依賴注入且是在單例模式下產(chǎn)生的循環(huán)依賴問題。 在Spring中,只有第

    2024年02月06日
    瀏覽(17)
  • Spring 是如何解決循環(huán)依賴問題的?

    Spring 是如何解決循環(huán)依賴問題的?

    提示:這里簡述項(xiàng)目相關(guān)背景: 例如:項(xiàng)目場景:示例:通過藍(lán)牙芯片(HC-05)與手機(jī) APP 通信,每隔 5s 傳輸一批傳感器數(shù)據(jù)(不是很大) ????????我們都知道,如果在代碼中,將 兩個(gè)或多個(gè) Bean 互相之間持有對方的引用 就會(huì)發(fā)生循環(huán)依賴。循環(huán)的依賴將會(huì)導(dǎo)致注入死循環(huán),這

    2024年02月13日
    瀏覽(23)
  • 詳細(xì)解釋一下Spring是如何解決循環(huán)依賴問題的

    詳細(xì)解釋一下Spring是如何解決循環(huán)依賴問題的

    我們都知道,如果在代碼中,將 兩個(gè)或多個(gè)Bean互相之間持有對方的引用就會(huì)發(fā)生循環(huán)依賴。循環(huán)的依賴將會(huì)導(dǎo)致注入死循環(huán) ,這是Spring發(fā)生循環(huán)依賴的原因 1. 互相依賴: A依賴B , B依賴A , 他們之間形成了循環(huán)依賴 2. 間接依賴: A依賴B ,B依賴C , C又依賴A,形成了循環(huán)依

    2024年02月09日
    瀏覽(24)
  • Spring 為什么要用三級(jí)緩存來解決循環(huán)依賴(AOP),二級(jí)緩存不行嗎

    解決有代理對象的循環(huán)依賴不一定要三級(jí)緩存,用二級(jí)甚至一級(jí)也能解決,下面討論下Spring為什么選擇三級(jí)緩存這個(gè)方案。 Spring最開始是沒有三級(jí)緩存的,后面版本因?yàn)橐肓薃OP,有了代理對象,又因?yàn)榇嬖谘h(huán)依賴,為了保證依賴注入過程注入的是代理對象,且不完全打破

    2024年04月26日
    瀏覽(23)
  • spring工程的啟動(dòng)流程?bean的生命周期?提供哪些擴(kuò)展點(diǎn)?管理事務(wù)?解決循環(huán)依賴問題的?事務(wù)傳播行為有哪些?

    spring工程的啟動(dòng)流程?bean的生命周期?提供哪些擴(kuò)展點(diǎn)?管理事務(wù)?解決循環(huán)依賴問題的?事務(wù)傳播行為有哪些?

    Spring工程的啟動(dòng)流程主要包括以下幾個(gè)步驟: 加載配置文件:Spring會(huì)讀取配置文件(如XML配置文件或注解配置)來獲取應(yīng)用程序的配置信息。 實(shí)例化并初始化IoC容器:Spring會(huì)創(chuàng)建并初始化IoC容器,即ApplicationContext。在這一步,Spring會(huì)解析配置文件,并將配置的Bean實(shí)例化。

    2024年02月12日
    瀏覽(33)
  • Spring解決循環(huán)依賴

    Spring解決循環(huán)依賴

    目錄 什么是spring循環(huán)依賴 什么情況下循環(huán)依賴可以被處理? spring?如何解決循環(huán)依賴 創(chuàng)建A這個(gè)Bean的流程 答疑 疑問:在給B注入的時(shí)候?yàn)槭裁匆⑷胍粋€(gè)代理對象? 初始化的時(shí)候是對A對象本身進(jìn)行初始化,而容器中以及注入到B中的都是代理對象,這樣不會(huì)有問題嗎? 三級(jí)

    2024年02月22日
    瀏覽(24)
  • (循環(huán)依賴問題)學(xué)習(xí)spring的第九天

    (循環(huán)依賴問題)學(xué)習(xí)spring的第九天

    ?Bean實(shí)例的屬性填充 ?Spring在屬性注入時(shí) , 分為如下幾種情況 : 注入單向?qū)ο笠?: 如usersevice里注入userdao , userdao里沒有注入其他屬性 ?? ?注入雙向?qū)ο笠?: 如usersevice里注入userdao , userdao也注入usersevice屬性? (搞清原理即可) 問題提出 : 形成死循環(huán) 解決問題 : 三級(jí)緩存解決

    2024年01月22日
    瀏覽(20)
  • 三級(jí)緩存---解決 Spring 循環(huán)依賴

    三級(jí)緩存---解決 Spring 循環(huán)依賴

    首先,什么是循環(huán)依賴?這個(gè)其實(shí)好理解,就是兩個(gè) Bean 互相依賴,類似下面這樣: \\\"\\\"\\\" \\\"\\\"\\\" AService 和 BService 互相依賴: 一般來說,循環(huán)依賴有三種不同的形態(tài),上面就是其中一種。 另外兩種分別是三者依賴,如下圖: 這種循環(huán)依賴一般隱藏比較深,不易發(fā)覺。 還有自我依

    2024年02月16日
    瀏覽(23)
  • Spring 能解決所有循環(huán)依賴嗎?

    Spring 能解決所有循環(huán)依賴嗎?

    以下內(nèi)容基于 Spring6.0.4。 看了上篇文章的小伙伴,對于 Spring 解決循環(huán)依賴的思路應(yīng)該有一個(gè)大致了解了,今天我們再來看一看,按照上篇文章介紹的思路,有哪些循環(huán)依賴 Spring 處理不了。 嚴(yán)格來說,其實(shí)也不是解決不了,所有問題都有辦法解決,只是還需要額外配置,這

    2024年02月17日
    瀏覽(22)
  • [Spring] 三級(jí)緩存解決循環(huán)依賴詳解

    [Spring] 三級(jí)緩存解決循環(huán)依賴詳解

    注冊一個(gè)bean對象的過程: Spring掃描class得到BeanDefinition – 根據(jù)得到的BeanDefinition去生成bean – 現(xiàn)根據(jù)class推斷構(gòu)造方法 – 根據(jù)推斷出來的構(gòu)造方法,反射,得到一個(gè)對象 – 填充初始對象中的屬性(依賴注入) – 如果原始對象種的某個(gè)方法被AOP了,那么要根據(jù)原始對象生成一

    2024年02月15日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包