回覆列表
  • 1 # 程式設計師搬長

    首先明確一點,Spring如果使用二級快取也是完全能夠解決bean的迴圈依賴問題的。那Spring為什麼要使用三級快取的設計呢?這個涉及到多方面的因素,其中包括:涉及到代理物件的迴圈依賴問題、涉及整個框架架構的擴充套件性與健壯性等問題,最終形成了現有現有的三級快取設計方案。

    關於這個問題我寫過一篇文章《Spring為什麼使用三級快取而不是兩級解決迴圈依賴問題?》我在這篇文章中詳細推演了Spring是如何採用三級快取設計來解決快取依賴問題的,也可以‬點選‬我的‬頭像‬進入‬主頁‬查詢‬這篇‬文章‬,歡迎查閱!

  • 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物件的建立效率和保證單例的唯一性,同時還能夠解決迴圈依賴的問題。因此,雖然使用三級快取可能會增加一些額外的開銷,但這些開銷相對於提高應用程式的效能和效率來說是微不足道的。

  • 中秋節和大豐收的關聯?
  • 從色彩說起,如何選擇一件穿起來就美的羽絨服?