視頻鏈接:https://www.bilibili.com/video/BV1hD4y177SD?p=9&spm_id_from=pageDriver&vd_source=9ae60d5eb74e5e80aca6aac78463c049

1、三個(gè)map結(jié)構(gòu)分別存儲(chǔ)什么類(lèi)型的對(duì)象
—級(jí)緩存:成品對(duì)象
二級(jí)緩存:半成品對(duì)象
三級(jí)緩存:lambda表達(dá)式
2、三個(gè)map結(jié)構(gòu)在查找對(duì)象的時(shí)候,順序是什么樣子的?
1,2,3
3、如果只有一個(gè)map結(jié)構(gòu),可以解決循環(huán)依賴問(wèn)題嗎?
理論上是可以的,因?yàn)橐患?jí)緩存和二級(jí)緩存的區(qū)別在于存儲(chǔ)的對(duì)象類(lèi)型不一樣,也就是說(shuō)我可以在一個(gè)map中增加標(biāo)識(shí)符來(lái)區(qū)分清楚成品對(duì)象和半成品對(duì)象,此時(shí)就需要在value上添加標(biāo)識(shí)符,那么就相當(dāng)于value上存儲(chǔ)的對(duì)象要增加其他的屬性.而在進(jìn)行操作的時(shí)候,每次都要根據(jù)key獲取到value,然后根據(jù)獲取的標(biāo)識(shí)符來(lái)判斷是成品還是半成品,太麻煩了,代碼非常不優(yōu)雅,兩個(gè)map可以輕松解決掉這個(gè)問(wèn)題
4、如果只有兩個(gè)map結(jié)構(gòu),可以解決循環(huán)依賴問(wèn)題嗎?
可以,但是有前提條件:如果沒(méi)有aop動(dòng)態(tài)代理對(duì)象的存在可以直接使用二級(jí)緩存,但是有了aop相關(guān)的配置之后就不行了
5、為什么必須要使用三個(gè)map結(jié)構(gòu)來(lái)解決循環(huán)依賴問(wèn)題?三級(jí)緩存是如何解決aop中的循環(huán)依賴問(wèn)題的?
《1》在創(chuàng)建代理對(duì)象的時(shí)候,是否需要?jiǎng)?chuàng)建原始對(duì)象?
在標(biāo)準(zhǔn)的bean的生命周期的流程中是需要?jiǎng)?chuàng)建原始對(duì)象的
《2》同一個(gè)容器中能否存在同名的兩個(gè)不同的對(duì)象?
不能
《3》如果同時(shí)存在了兩個(gè)同名的不同對(duì)象怎么辦?
如果存在了,那么就要進(jìn)行覆蓋,在講流程的時(shí)候哪個(gè)地方出現(xiàn)了覆蓋?(getEarlyBeanReference方法中,也就是lambda表達(dá)式要執(zhí)行的具體邏輯中出現(xiàn)了)
《4》為什么有了三級(jí)緩存就可以解決這個(gè)問(wèn)題?
在標(biāo)準(zhǔn)的bean的生命周期中,需要先創(chuàng)建出原始對(duì)象,然后通過(guò)populateBean方法來(lái)完成對(duì)象的屬性賦值,但是動(dòng)態(tài)代理對(duì)象的創(chuàng)建是在populateBean方法之后的BeanPostProcessor的后置處理方法里面完成動(dòng)態(tài)代理對(duì)象創(chuàng)建的,也就是說(shuō)動(dòng)態(tài)代理對(duì)象的創(chuàng)建是要滯后于屬性的賦值的,如果按照此方式來(lái)執(zhí)行的話,也就是說(shuō)先通過(guò)原始對(duì)象來(lái)進(jìn)行屬性的賦值,然后在后續(xù)步驟的時(shí)候再生成代理對(duì)象,此時(shí)是不會(huì)完成代理對(duì)象的替換的,所以會(huì)出現(xiàn)《this means that said other beans do not use the final version of the bean》的錯(cuò)誤
《5》因此我們要想辦法解決這個(gè)問(wèn)題,怎么解決?
需要將生成代理對(duì)象的步驟提前,也就是說(shuō)在進(jìn)行賦值之前必須要唯一性的確定出到底賦值的是原始對(duì)象還是代理對(duì)象,但是bean對(duì)象的創(chuàng)建過(guò)程不是人為干預(yù)的,是容器來(lái)幫助我們進(jìn)行控制的,所以使用lambda表達(dá)式相當(dāng)于不會(huì)立刻執(zhí)行,但是在賦值的前一刻必須要確定好是代理對(duì)象還是原始對(duì)象,也就是在getEarlyBeanReference方法中使用的操作邏輯
6、既然spring中提供了循環(huán)依賴的解決方案,為什么我在寫(xiě)業(yè)務(wù)代碼的時(shí)候還回出現(xiàn)循環(huán)依賴的問(wèn)題?
spring是一個(gè)跟業(yè)務(wù)無(wú)關(guān)的框架,他只是提供了一個(gè)預(yù)防此種情況的循環(huán)依賴問(wèn)題的解決方案,但是并不是所有的循環(huán)依賴向題都可以通過(guò)此方式來(lái)解決,就跟我們寫(xiě)業(yè)務(wù)代碼的異常一樣,你可以寫(xiě)異常處理機(jī)制來(lái)預(yù)防一部分異常情況,但是不是能解決所有的異常情況
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前題目:Spring三級(jí)緩存-創(chuàng)新互聯(lián)
文章來(lái)源:http://chinadenli.net/article4/cepioe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站策劃、建站公司、小程序開(kāi)發(fā)、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容