乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Spring循環(huán)依賴問(wèn)題的解決

       小仙女本仙人 2021-04-29

      循環(huán)依賴問(wèn)題

      一個(gè)bean的創(chuàng)建分為如下步驟:

      當(dāng)創(chuàng)建一個(gè)簡(jiǎn)單對(duì)象的時(shí)候,過(guò)程如下:

      • 先從單例池中獲取bean,發(fā)現(xiàn)無(wú) a

      • 創(chuàng)建 a 的實(shí)例

      • 為 a 賦值

      • 把 a 放到單例池中

      當(dāng)創(chuàng)建一個(gè)對(duì)象并且其中有另外一個(gè)對(duì)象是就變成了這樣:

      但是當(dāng)在B對(duì)象中由引用了A對(duì)象,就會(huì)變成這樣:

      因?yàn)锳和B兩者相互引用,但是單例池中始終無(wú)法創(chuàng)建任一對(duì)象,所以會(huì)出現(xiàn)死循環(huán)。

      因此,我們需要添加一個(gè)半成品池,先把A初始化出來(lái),放到一個(gè)半成品池中。

      過(guò)程如下:

      • 先從單例池中找A對(duì)象,沒(méi)有則開(kāi)始創(chuàng)建A對(duì)象

      • 實(shí)例化A對(duì)象,并放入半成品池中

      • 為A對(duì)象賦值

      • 賦值時(shí)發(fā)現(xiàn)引用了B對(duì)象 --> 實(shí)例化B對(duì)象,并放入半成品池中

      • 為B對(duì)象賦值

      • 賦值時(shí)發(fā)現(xiàn)引用了A對(duì)象,從單例池中和半成品池中找A對(duì)象,并將其賦值

      • 實(shí)例化B對(duì)象,并放入單例池中

      • 實(shí)例化A對(duì)象,從半成品池中移除A對(duì)象,并放入單例池中

      這樣就解決了死循環(huán)創(chuàng)建但是當(dāng)使用了動(dòng)態(tài)代理后,情況又會(huì)有所變化.

      先來(lái)看一下AOP的執(zhí)行過(guò)程,如圖:

      在bean的創(chuàng)建過(guò)程中,創(chuàng)建動(dòng)態(tài)代理的時(shí)機(jī)是在初始化之后的,如圖:

      這個(gè)時(shí)候半成品池里放的是沒(méi)有代理過(guò)的A對(duì)象,當(dāng)B去半成品池中獲取A對(duì)象,獲取的是動(dòng)態(tài)代理前的A對(duì)象,而我們應(yīng)該獲取的是動(dòng)態(tài)代理后的A對(duì)象,這就會(huì)出現(xiàn)問(wèn)題.

      為了解決AOP的問(wèn)題,spring又加入了一個(gè)工廠池

      執(zhí)行過(guò)程如下:

      • 當(dāng)創(chuàng)建A對(duì)象的時(shí)候會(huì)在工廠池中創(chuàng)建factory(a)

      • ....

      • 當(dāng)給B賦值時(shí),發(fā)現(xiàn)引用了A,就會(huì)去工廠池中執(zhí)行getEarlyReference 提前處理方法,生成一個(gè)動(dòng)態(tài)代理后的A對(duì)象,并放入半成品池中,再賦值給B

      • ...

      注意: 

      當(dāng)實(shí)例化對(duì)象A的時(shí)候,A對(duì)象會(huì)產(chǎn)生與之對(duì)應(yīng)的factory(a)方法,只有當(dāng)某個(gè)對(duì)象引用A對(duì)象時(shí),factory(a)方法才會(huì)被執(zhí)行,從而去通過(guò)提前引用的方式創(chuàng)建動(dòng)態(tài)代理對(duì)象放入半成品池中

      如果說(shuō)A對(duì)象沒(méi)有被提前引用,factory(a)方法不會(huì)執(zhí)行

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多