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

【spring6】解決循環(huán)依賴(lài)的機(jī)理

這篇具有很好參考價(jià)值的文章主要介紹了【spring6】解決循環(huán)依賴(lài)的機(jī)理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

????????循環(huán)依賴(lài):A對(duì)象中有B屬性。B對(duì)象中有A屬性。比如:丈夫類(lèi)Husband,妻子類(lèi)Wife。Husband中有Wife的引用。Wife中有Husband的引用。

? ? ? ? 解決:至少一個(gè)類(lèi)采用set注入?+ singleton模式。

? ? ? ? 原因:這種方式可以做到將“實(shí)例化Bean”和“給Bean屬性賦值”這兩個(gè)動(dòng)作分開(kāi)去完成。調(diào)用無(wú)參構(gòu)造實(shí)例化Bean對(duì)象,可以先不賦值提前將該Bean對(duì)象“曝光”給外界,然后調(diào)用setter方法來(lái)完成賦值。我們可以先把所有的單例Bean實(shí)例化出來(lái),放到一個(gè)集合當(dāng)中(我們可以稱(chēng)之為緩存),所有的單例Bean全部實(shí)例化完成之后,以后我們?cè)俾恼{(diào)用setter方法給屬性賦值。這樣就解決了循環(huán)依賴(lài)的問(wèn)題。

? ? ? ? 從源碼層分析:

【spring6】解決循環(huán)依賴(lài)的機(jī)理,java,spring,開(kāi)發(fā)語(yǔ)言,后端

Cache of singleton objects: bean name to bean instance. 單例對(duì)象的緩存:key存儲(chǔ)bean名稱(chēng),value存儲(chǔ)Bean對(duì)象【一級(jí)緩存】

Cache of early singleton objects: bean name to bean instance. 早期單例對(duì)象的緩存:key存儲(chǔ)bean名稱(chēng),value存儲(chǔ)早期的Bean對(duì)象【二級(jí)緩存】

Cache of singleton factories: bean name to ObjectFactory. 單例工廠緩存:key存儲(chǔ)bean名稱(chēng),value存儲(chǔ)該Bean對(duì)應(yīng)的ObjectFactory對(duì)象【三級(jí)緩存】

【spring6】解決循環(huán)依賴(lài)的機(jī)理,java,spring,開(kāi)發(fā)語(yǔ)言,后端

這個(gè)方法的作用是:將創(chuàng)建Bean對(duì)象的ObjectFactory對(duì)象提前曝光。

【spring6】解決循環(huán)依賴(lài)的機(jī)理,java,spring,開(kāi)發(fā)語(yǔ)言,后端

從源碼中可以看到,spring會(huì)先從一級(jí)緩存中獲取Bean,如果獲取不到,則從二級(jí)緩存中獲取Bean,如果二級(jí)緩存還是獲取不到,則從三級(jí)緩存中獲取之前曝光的ObjectFactory對(duì)象,通過(guò)ObjectFactory對(duì)象獲取Bean實(shí)例,這樣就解決了循環(huán)依賴(lài)的問(wèn)題。

總結(jié):

????????Spring只能解決setter方法注入的單例bean之間的循環(huán)依賴(lài)。ClassA依賴(lài)ClassB,ClassB又依賴(lài)ClassA,形成依賴(lài)閉環(huán)。Spring在創(chuàng)建ClassA對(duì)象后,不需要等給屬性賦值,直接將其曝光到bean緩存當(dāng)中。在解析ClassA的屬性時(shí),又發(fā)現(xiàn)依賴(lài)于ClassB,再次去獲取ClassB,當(dāng)解析ClassB的屬性時(shí),又發(fā)現(xiàn)需要ClassA的屬性,但此時(shí)的ClassA已經(jīng)被提前曝光加入了正在創(chuàng)建的bean的緩存中,則無(wú)需創(chuàng)建新的的ClassA的實(shí)例,直接從緩存中獲取即可。從而解決循環(huán)依賴(lài)問(wèn)題。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-859016.html

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

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

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

相關(guān)文章

  • Spring如何解決循環(huán)依賴(lài)問(wèn)題

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

    2024年02月06日
    瀏覽(17)
  • Spring怎么解決循環(huán)依賴(lài)問(wèn)題?

    Spring怎么解決循環(huán)依賴(lài)問(wèn)題?

    循環(huán)依賴(lài)是指 一個(gè)或多個(gè)對(duì)象之間存在直接或間接的依賴(lài)關(guān)系,這種依賴(lài)關(guān)系構(gòu)成一個(gè)環(huán)形調(diào)用 , 舉個(gè)例子 : A 依賴(lài)B , B依賴(lài)C , C依賴(lài)A , 這樣就形成了循環(huán)依賴(lài); ? ①構(gòu)造器的循環(huán)依賴(lài):這種依賴(lài)spring是處理不了的,直接拋出BeanCurrentlyInCreationException異常。 ②單例模式下的se

    2024年02月08日
    瀏覽(25)
  • Spring 是如何解決循環(huán)依賴(lài)的

    Spring 是如何解決循環(huán)依賴(lài)的

    1.什么是循環(huán)依賴(lài)? 所謂的循環(huán)依賴(lài)是指,A 依賴(lài) B,B 又依賴(lài) A,它們之間形成了循環(huán)依賴(lài)?;蛘呤?A 依賴(lài) B,B 依賴(lài) C,C 又依賴(lài) A。它們之間的依賴(lài)關(guān)系如下: 2.通過(guò)手寫(xiě)代碼演示理解Spring循環(huán)依賴(lài) DEMO: 為什么需要二級(jí)緩存? 一級(jí)緩存和二級(jí)緩存相比: 二級(jí)緩存只要是為了分

    2024年02月03日
    瀏覽(19)
  • spring解決循環(huán)依賴(lài)的三級(jí)緩存

    實(shí)例化,對(duì)應(yīng)方法:AbstractAutowireCapableBeanFactory中的createBeanInstance方法,簡(jiǎn)單理解就是new了一個(gè)對(duì)象。 屬性注入,對(duì)應(yīng)方法:AbstractAutowireCapableBeanFactory的populateBean方法,為實(shí)例化中new出來(lái)的對(duì)象填充屬性和注入依賴(lài)。 初始化,對(duì)應(yīng)方法:AbstractAutowireCapableBeanFactory的initialize

    2024年02月03日
    瀏覽(24)
  • Spring 怎么解決循環(huán)依賴(lài)的呢?

    Spring 怎么解決循環(huán)依賴(lài)的呢?

    Spring 循環(huán)依賴(lài):簡(jiǎn)單說(shuō)就是自己依賴(lài)自己,或者和別的 Bean 相互依賴(lài)。 只有單例的 Bean 才存在循環(huán)依賴(lài)的情況, 原型 (Prototype)情況下,Spring 會(huì)直接拋出異常。原因很簡(jiǎn)單,AB 循環(huán)依賴(lài),A 實(shí)例化的時(shí)候,發(fā)現(xiàn)依賴(lài) B,創(chuàng)建 B 實(shí)例,創(chuàng)建 B 的時(shí)候發(fā)現(xiàn)需要 A,創(chuàng)建 A1 實(shí)例……

    2024年02月09日
    瀏覽(31)
  • Spring——三級(jí)緩存解決循環(huán)依賴(lài)詳解

    Spring——三級(jí)緩存解決循環(huán)依賴(lài)詳解

    就是在Bean生成流程中保存Bean對(duì)象三種形態(tài)的三個(gè)Map集合,如下: 用來(lái)解決什么問(wèn)題? 這個(gè)大家應(yīng)該熟知了,就是循環(huán)依賴(lài) 什么是循環(huán)依賴(lài)? 就像下面這樣,AService 中注入了BService ,而B(niǎo)Service 中又注入了AService ,這就是循環(huán)依賴(lài) 這幾個(gè)問(wèn)題我們結(jié)合源碼來(lái)一起看一下 : 三級(jí)

    2024年02月03日
    瀏覽(41)
  • Spring 能解決所有循環(huán)依賴(lài)嗎?

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

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

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

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

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

    2024年02月15日
    瀏覽(22)
  • 【Spring】Spring的循環(huán)依賴(lài)以及解決方案

    【Spring】Spring的循環(huán)依賴(lài)以及解決方案

    ? Spring循環(huán)依賴(lài)指的是兩個(gè)或多個(gè)Bean之間相互依賴(lài),形成一個(gè)環(huán)狀依賴(lài)的情況。通俗的說(shuō),就是A依賴(lài)B,B依賴(lài)C,C依賴(lài)A,這樣就形成了一個(gè)循環(huán)依賴(lài)的環(huán)。 ? Spring循環(huán)依賴(lài)通常會(huì)導(dǎo)致Bean無(wú)法正確地被實(shí)例化,從而導(dǎo)致應(yīng)用程序無(wú)法正常啟動(dòng)或者出現(xiàn)異常。因此,Spring循環(huán)

    2024年04月25日
    瀏覽(47)
  • Spring 是如何解決循環(huán)依賴(lài)問(wèn)題的?

    Spring 是如何解決循環(huán)依賴(lài)問(wèn)題的?

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

    2024年02月13日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包