1. 程式人生 > 其它 >Spring三級快取的理解

Spring三級快取的理解

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

1、如何解決迴圈依賴?這個我會

2、為什麼有二級快取?我回答提高了效率,又問,二級快取是完整物件嗎?我當時只考慮到這個時候可能會有代理生成,生成後應該是可以使用了,然後我回答,是完整的

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

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

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

首先要知道幾個點:

1、在有代理物件生成時,其實這個迴圈依賴過程中有倆物件,這個需要注意,一個是物件本身(bean),一個是Aop代理物件(proxy),二級快取生成代理物件的時候,這個

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

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

2、二級快取存在是必須的,因為有一種情況就是,A依賴B,B依賴A,B依賴C,C依賴A,這時候C再呼叫getBean的時候,如果沒有二級快取,那麼會再建立幾個代理物件出來

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

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