spring 的IOC原理

 Spring的設計理念:

 

Spring的核心組件:bean 、context、core,這三個中最核心的是bean,bean就像舞臺的演員一樣,context就像背景一樣,core就像道具一樣。Sping 解決的關鍵問題就是如何管理這些bean,spring把對象包裹在bean中達到對對象的管理和一些額外操作,把對象之間的依賴關係轉而用配置文件來管理,就是它的依賴注入機制,這個依賴注入關係在一個叫做IOC的容器中進行管理。Spring構建一個數據結構,根據這個數據結構設計它的生存環境context,並讓它在這個生存環境中不停的發現、建立、維護bean之間的關係,context就是一個bean關係的集合,這個關係的集合就叫做IOC容器。Core就是發現、建立、維護每個bean之間關係所需要的一系列工具。這就是spring的設計理念。

 

Bean組件:

(1)     bean組件主要解決三件事:定義、創建、解析bean,bean是工廠模式beanfactory創建的,bean主要由beanDefinition定義描述的,bean的解析主要是對spring配置文件解析。

beanfactory是頂級接口,他的三個子類ListableBeanFactory、HierarchicalBeanFactory、AutoAireCapableBeanFactory。他們最終的默認實現類是DefaultListableBeanFactory,它實現的所有的接口。每個接口都有它使用的場合,主要是區分spring內部對象的傳遞和轉化過程中對對象的數據訪問所作的限制。ListableBeanFactory 接口表示這些 Bean 是可列

HierarchicalBeanFactory 表示Bean 是有繼承關係的,AutowireCapableBeanFactory 接口定義 Bean 的自動裝配規則。

(3)bean的定義就是完整的描述spring配置文件中節點的所有信息。Spring成功解析配置文件定義的節點後, spring內部就將它轉化爲beandefinition對象,以後所有的操作都是對這個對象完成的。

 

Context組件

  Context就是給spring提供一個運行時環境,以保存各個對象的狀態,context環境的構建。

(1)     context繼承了5個接口,用於擴展context的功能。繼承beanFactory,容器的運行主體對象是bean,beanfactory用於創建bean。ApplicationContext繼承了resourceLoader, ,使得 ApplicationContext 可以訪問到任何外部資源。

(2)ApplicationContext 的子類主要包含兩個方面:configurableApplicationContext說明context是可修改的,用戶可以動態的添加修改已有的配置信息,他下面的多個子類:

其中最經常使用的是可更新的 Context,即 AbstractRefreshableApplicationContext 類。

 WebApplicationContext 顧名思義,就是爲 web 準備的 Context 他可以直接訪問到 ServletContext,通常情況下,這個接口使用的少。

(3)application要做的事情:標識一個應用環境,利用beanfactory創建bean對象,保存對象的關係表,能夠捕獲各種事件。

 

 

Core 是spring的演出時的道具,看看這個道具:

(1)     resource接口封裝了各種可能的資源類型,對使用者來說屏蔽了文件類型的不同。Resource繼承了inputStreamSource接口,這個接口提供了getInputStreamSource方法,返回inputStream類,所有的資源都可以通過inputStream類獲得,屏蔽了資源提供者。資源的加載也是通過ResourceLoader接口完成的,屏蔽了資源的加載者,他的默認實現類defaultResourceLoader.

(2)     Context資源的加載、解析、描述工作委託給了ResourcePatternResolver類來完成,他把資源的加載、解析和定義整合在一起便於其他組件使用。

 

 

 

IOC容器的構建:

  IOC容器就是context組件結合其他兩個組件構成bean的關係網,構建的入口就是abstractApplicationContext的refresh入口。步驟:註冊可能感興趣的事件;創建bean的實例對象;觸發被監聽的事件

(1)    創建和配置beanFactory,通過AbstractRefreshableApplicationContext. refreshBeanFactory 方法創建更新beanfactory,beanFactory已存在就更新,如果沒有就創建.loadBeanDefinitions(beanFactory)把用戶自定義的數據結構轉化爲IOC容器特定的數據結構。

(2)    創建好 BeanFactory 後,接下去添加一些 Spring 本身需要的一些工具類,這個操作在 AbstractApplicationContext 的 prepareBeanFactory 方法完成。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章