Spring IOC 原理與IOC 容器實現

一. Spring IOC 原理緩存

1. 概念架構

Spring 經過一個配置文件描述 Bean 及 Bean 之間的依賴關係,利用 Java 語言的反射功能實例化Bean 並創建 Bean 之間的依賴關係。 Spring 的 IoC 容器在完成這些底層工做的基礎上,還提供了 Bean 實例緩存、生命週期管理、 Bean 實例代理、事件發佈、資源裝載等高級服務。框架

2. Spring 容器高層視圖異步

Spring 啓動時讀取應用程序提供的 Bean 配置信息,並在 Spring 容器中生成一份相應的 Bean 配置註冊表,而後根據這張註冊表實例化 Bean,裝配好 Bean 之間的依賴關係,爲上層應用提供準備就緒的運行環境。其中 Bean 緩存池爲 HashMap 實現編輯器

Spring IOC 原理與IOC 容器實現

3. IOC 容器實現3d

BeanFactory-框架基礎設施代理

BeanFactory 是 Spring 框架的基礎設施,面向 Spring 自己;ApplicationContext 面向使用Spring 框架的開發者,幾乎全部的應用場合咱們都直接使用 ApplicationContext 而非底層的 BeanFactory。日誌

Spring IOC 原理與IOC 容器實現

BeanDefinitionRegistry 註冊表cdn

(1). Spring 配置文件中每個節點元素在 Spring 容器裏都經過一個 BeanDefinition 對象表示,它描述了 Bean 的配置信息。而 BeanDefinitionRegistry 接口提供了向容器手工註冊BeanDefinition 對象的方法。對象

BeanFactory 頂層接口

(2). 位於類結構樹的頂端 ,它最主要的方法就是 getBean(String beanName),該方法從容器中返回特定名稱的 Bean,BeanFactory 的功能經過其餘的接口獲得不斷擴展:

ListableBeanFactory

(3). 該接口定義了訪問容器中 Bean 基本信息的若干方法,如查看 Bean 的個數、獲取某一類型Bean 的配置名、查看容器中是否包括某一 Bean 等方法;

HierarchicalBeanFactory 父子級聯

(4). 父子級聯 IoC 容器的接口,子容器能夠經過接口方法訪問父容器; 經過HierarchicalBeanFactory 接口, Spring 的 IoC 容器能夠創建父子層級關聯的容器體系,子容器能夠訪問父容器中的 Bean,但父容器不能訪問子容器的 Bean。Spring 使用父子容器實現了不少功能,好比在 Spring MVC 中,展示層 Bean 位於一個子容器中,而業務層和持久層的 Bean 位於父容器中。這樣,展示層 Bean 就能夠引用業務層和持久層的 Bean,而業務層和持久層的 Bean 則看不到展示層的 Bean。

ConfigurableBeanFactory

(5). 是一個重要的接口,加強了 IoC 容器的可定製性,它定義了設置類裝載器、屬性編輯器、容器初始化後置處理器等方法;

AutowireCapableBeanFactory 自動裝配

(6). 定義了將容器中的 Bean 按某種規則(如按名字匹配、按類型匹配等)進行自動裝配的方法;

SingletonBeanRegistry 運行期間註冊單例 Bean

(7). 定義了容許在運行期間向容器註冊單實例 Bean 的方法;對於單實例( singleton)的 Bean來講,BeanFactory 會緩存 Bean 實例,因此第二次使用 getBean() 獲取 Bean 時將直接從IoC 容器的緩存中獲取 Bean 實例。Spring 在 DefaultSingletonBeanRegistry 類中提供了一個用於緩存單實例 Bean 的緩存器,它是一個用 HashMap 實現的緩存器,單實例的 Bean 以beanName 爲鍵保存在這個 HashMap 中。

依賴日誌框框

(8). 在初始化 BeanFactory 時,必須爲其提供一種日誌框架,好比使用 Log4J, 即在類路徑下提供 Log4J 配置文件,這樣啓動 Spring 容器纔不會報錯。

二.ApplicationContext 面向開發應用

ApplicationContext 由 BeanFactory 派生而來,提供了更多面向實際應用的功能。

ApplicationContext 繼承了 HierarchicalBeanFactory 和 ListableBeanFactory 接口,在此基礎上,還經過多個其餘的接口擴展了 BeanFactory 的功能:

Spring IOC 原理與IOC 容器實現

1. ClassPathXmlApplicationContext:默認從類路徑加載配置文件

2. FileSystemXmlApplicationContext:默認從文件系統中裝載配置文件

3. ApplicationEventPublisher:讓容器擁有發佈應用上下文事件的功能,包括容器啓動事件、關閉事件等。

4. MessageSource:爲應用提供 i18n 國際化消息訪問的功能;

5. ResourcePatternResolver : 所 有 ApplicationContext 實現類都實現了相似於PathMatchingResourcePatternResolver 的功能,能夠經過帶前綴的 Ant 風格的資源文件路徑裝載 Spring 的配置文件。

6. LifeCycle:該接口是 Spring 2.0 加入的,該接口提供了 start()和 stop()兩個方法,主要用於控制異步處理過程。在具體使用時,該接口同時被 ApplicationContext 實現及具體Bean 實現, ApplicationContext 會將 start/stop 的信息傳遞給容器中全部實現了該接口的 Bean,以達到管理和控制 JMX、任務調度等目的。

7. ConfigurableApplicationContext 擴展於 ApplicationContext,它新增長了兩個主要的方法: refresh()和 close(),讓 ApplicationContext 具備啓動、刷新和關閉應用上下文的能力。在應用上下文關閉的狀況下調用 refresh()便可啓動應用上下文,在已經啓動的狀態下,調用 refresh()則清除緩存並從新裝載配置信息,而調用 close()則可關閉應用上下文。

三.WebApplication 體系架構

WebApplicationContext 是專門爲 Web 應用準備的,它容許從相對於 Web 根目錄的路徑中裝載配置文件完成初始化工做。從 WebApplicationContext 中能夠得到ServletContext 的引用,整個 Web 應用上下文對象將做爲屬性放置到 ServletContext中,以便 Web 應用環境能夠訪問 Spring 應用上下文。

Spring IOC 原理與IOC 容器實現
相關文章
相關標籤/搜索