Spring三級緩存的理解


最近參加了一次面試,本來覺得自己對Spring三級緩存理解了,結果問了幾個問題,直接暈了

1、如何解決循環依賴?這個我會

2、為什么有二級緩存?我回答提高了效率,又問,二級緩存是完整對象嗎?我當時只考慮到這個時候可能會有代理生成,生成后應該是可以使用了,然后我回答,是完整的

面試官說它是不完整的,你回去好好看看吧

此處省略一千字。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

技不如人,我今天跟了一下源碼,順帶把整個流程又梳理了一次:

首先要知道幾個點:

1、在有代理對象生成時,其實這個循環依賴過程中有倆對象,這個需要注意,一個是對象本身(bean),一個是Aop代理對象(proxy),二級緩存生成代理對象的時候,這個

代理對象沒啥毛病,已經可以使用了,但是這個bean對象是包含在代理對象內部的一個屬性,這就很關鍵了,因為假如這個bean就是第一次實例化的那個bean,很明顯它的依賴

注入還沒有完全結束,所以此時說對象不完整其實說的是bean不完整,要說proxy不完整,我覺得有點牽強。

2、二級緩存存在是必須的,因為有一種情況就是,A依賴B,B依賴A,B依賴C,C依賴A,這時候C再調用getBean的時候,如果沒有二級緩存,那么會再創建幾個代理對象出來

這就違反了單例的初衷。所以二級緩存也是必須存在,而且二級緩存本身只能是不完整對象,因為第一次的依賴注入還沒結束呢。

以上就是我對三級緩存的理解,如果還有不對的,歡迎指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM