站在某一高度分析Spring源碼之Spring_IOC(一)

spring的應用已經愈來愈普遍了,而Spring IOC在spring中的地位是不可撼動的,在某種角度已經超越了AOP。不少人一提IOC,便張口就來:控制反轉。究竟哪些方面被反轉了呢?答案是依賴對象的得到被反轉了。不少時候,咱們經過多個對象之間的協做來完成一個功能,若是獲取所依賴對象靠自身來實現,這將致使代碼的耦合度高和難以測試。固然,控制反轉還有一個好聽的名字:依賴注入。spring

Spring IOC經過引入xml配置,由IOC容器來管理對象的生命週期,依賴關係等。測試

類結構圖spa

總體結構圖:xml

 

ClassPathXMLApplicationContext:IOC注入的入口類,提供了讀取xml配置文件加載bean到容器的實現方式。對象

AbstractXmlApplicationContext主要是解析bean文件方法,具體的解析實如今其餘類中。blog

AbstractRefreshableConfigApplicationContext:沒有更多的實現,主要是對bean配置文件進行文件的路徑進行解析。繼承

AbstractRefreshableApplicationContext主要是對容器進行刷新操做。包括當進行從新加載bean文件到容器以前進行容器銷燬工做;初始化容器bean工廠DefaultListableBeanFactory;加載配置文件的bean。接口

AbstractApplicationContextIOC注入的核心處理類,實現了操做上下文的通用方法。經過模板方法的方式,作refresh容器操做,包括了包括解析bean文件,註冊bean注入到bean工廠,註冊監聽等。具體的實現由子類進行實現。生命週期

ConfigurableApplicationContext:此接口定義了容器和上下文相關的通用方法,如刷新容器,獲取bean工廠。資源

ApplicationContext:定義操做上下文的通用方法,如獲取啓動時間等。

ListableBeanFactory:定義操做Bean工廠的通用方法(可列舉的bean工廠)。包括獲取當前bean工廠的因此bean實例;當前bean工廠的bean數量等等。其默認實現類爲DefaultListableBeanFactory。

HierarchicalBeanFactory:有層級的bean工廠。

BeanFactory:最頂層接口,定義了bean工廠的通用方法,包括獲取單個bean實例;判斷是否爲單例模式的bean實例等。

處理流程

核心類介紹

BeanDefinition:定義了bean通用屬性及get、set方法。

AbstractBeanDefinition:實現了BeanDefintion接口,定義了bean的通用屬性。

RootBeanDefinition繼承於AbstractBeanDefinition類,提供了一些構造方法供實例化。

GenericBeanDefinition繼承於AbstractBeanDefinition類,提供了一些構造方法供實例化。與RootBeanDefinition的不一樣之處就在於能夠設置和獲取父類bean的名字。

PathMatchingResourcePatternResolver:提供了讀取資源文件的方式,支持classpath:前綴讀取單個資源文件和classptah*:前綴讀取下的一組資源文件。最終會返回Resource[]。

相關文章
相關標籤/搜索