-
1 # 程式設計師搬長
-
2 # 飛商筆記
Spring框架中使用三級快取是為了提高bean物件的建立效率和保證單例的唯一性。下面對於為什麼使用三級快取進行解釋:
Spring框架使用單例模式來管理bean物件,保證在應用程式執行期間只建立一次,以提高應用程式的效能和效率。在應用程式啟動時,Spring容器會透過BeanFactory或ApplicationContext建立並管理bean物件,其中,BeanFactory主要負責管理bean物件的生命週期,而ApplicationContext除了BeanFactory的功能外,還提供了一些額外的特性,例如AOP、事務管理等。
在建立bean物件時,Spring框架會將bean物件的定義資訊儲存在BeanDefinition物件中,包括bean物件的類名、屬性資訊、依賴關係等。為了提高bean物件的建立效率,Spring框架採用了快取機制。具體來說,當應用程式第一次請求獲取bean物件時,Spring框架會先從快取中查詢是否已經存在該bean物件的例項,如果存在則直接返回;如果不存在則建立新的bean物件並將其放入快取中。由於Spring框架支援單例模式,因此快取中儲存的都是單例的bean物件。
Spring框架使用的是三級快取,其快取結構如下:
singletonObjects:儲存已經建立好的bean物件,即單例池,當應用程式第一次請求獲取bean物件時,Spring框架會先從這個快取中查詢是否存在該bean物件的例項。
earlySingletonObjects:儲存正在建立中的bean物件,即“早期單例”,在bean物件建立的過程中,如果需要引用其他的bean物件,則需要使用到”
singletonFactory:儲存建立bean物件的工廠,即“單例工廠”,在bean物件建立的過程中,如果需要引用其他的bean物件,則需要使用到“單例工廠”,以保證依賴關係的正確性。
透過使用三級快取,Spring框架可以提高bean物件的建立效率和保證單例的唯一性,同時還能夠解決迴圈依賴的問題。因此,雖然使用三級快取可能會增加一些額外的開銷,但這些開銷相對於提高應用程式的效能和效率來說是微不足道的。
回覆列表
首先明確一點,Spring如果使用二級快取也是完全能夠解決bean的迴圈依賴問題的。那Spring為什麼要使用三級快取的設計呢?這個涉及到多方面的因素,其中包括:涉及到代理物件的迴圈依賴問題、涉及整個框架架構的擴充套件性與健壯性等問題,最終形成了現有現有的三級快取設計方案。
關於這個問題我寫過一篇文章《Spring為什麼使用三級快取而不是兩級解決迴圈依賴問題?》我在這篇文章中詳細推演了Spring是如何採用三級快取設計來解決快取依賴問題的,也可以點選我的頭像進入主頁查詢這篇文章,歡迎查閱!