讀書筆記-SpringIoc

《Sping技術內幕:深刻解析Spring架構與設計原理第2版》

什麼是Spring Ioc

在開發應用時,常常須要進行組件間的調用,這種依賴關係若是固化在組件設計中,就會形成依賴關係的僵化和維護難度的增長,Ioc容器就是讓獲取資源的方向反轉,主動管理這些依賴關係,將這些依賴關係注入到組件中,會讓這些依賴關係的適配和管理更加靈活。編程

常見的注入方式:

一、接口注入數據結構

二、setter注入架構

三、構造器注入框架

Ioc容器的設計與實現:

BeanFactorypost

  • 定義了Ioc容器的基本的形式;spa

  • 提供了Ioc容器應該遵照的最基本的服務契約;設計

  • 是咱們使用Ioc容器所應該遵照的最基本的編程規範;xml

典型的幾個實現:接口

XmlBeanFactory生命週期

DefaultListableBeanFactory

編程的方式使用DefaultListableBeanFactory

Resource resource = new ClassPathResource("XmlBeanFactory.xml", getClass());
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(resource);

 

ApplicationContext

  • 擴展了MessageSource接口,支持不一樣的信息源,能夠支持國際化的實現,爲開發多語言版本應用提供服務

  • 訪問資源,體如今ResourceLoader對Resource接口的支持上,咱們能夠從不一樣的地方獲得Bean的定義

  • 支持應用事件

  • 提供了一系列的附加服務,使得ApplicationContext與BeanFactory相比是一種面向框架的使用風格,企業級項目中,以ApplicationContext爲Ioc容器的基本形態。

使用Ioc容器時,須要如下幾個步驟:

1)建立Ioc文件的抽象資源,其中包含了BeanDefinition的信息;

2)建立BeanFactory,這裏使用了DefaultListableBeanFactory

3)建立BeanDefinition的讀取器,這裏使用 XmlBeanDefinitionReader來載入Xml文件形式的BeanDefinition,經過一個回調配置給BeanFactory

4)解析BeanDefinition,完成載入和註冊Bean後,能夠直接使用Ioc容器了。

 

Ioc的初始化過程

  1. 資源定位

    由ResourceLoader經過統一的Resource接口來完成

  2. BeanDefinition的載入

    將用戶定義好的Bean表示成Ioc容器內部的數據結構

  3. 向Ioc容器註冊 BeanDefinition,是調用BeanDefinitionRegistry接口完成的

Ioc容器初始化入口:refresh()

  1. 預啓動

  • 設置啓動時間

  • 將active flag設置爲true

  • 初始化屬性資源

  • 檢查必須的一些屬性配置

      2.建立DefaultListableBeanFactory

      三、對BeanFactory進行一系列的設置

      四、調用BeanFactory的後置處理器

      五、註冊BeanFactory的後置處理器

      六、初始化MessageSource

      七、初始化上下文中的事件機制

      八、初始化一些比較特殊的Bean

      九、檢查監聽Bean,並向容器註冊這些Bean

     十、實例化全部的(non-lazy-init)單例Bean

     十一、發佈事件,結束容器的啓動

Ioc容器中Bean的生命週期:

  • Bean實例的建立

  • 爲Bean實例設置屬性

  • 調用Bean的初始化方法

  • 應用經過Ioc容器使用Bean

  • 當關閉容器時,調用Bean的銷燬方法

lazy-int屬性和預實例化

若是設置lazy-int屬性時,依賴注入發生在Ioc容器的初始化的過程當中

lazy-int預實例化發生在 refresh()中的finishBeanFactoryInitialization中

FactoryBean

Spring 在使用FactoryBean時,使用了工廠模式;

FactoryBean是Spring中的一個接口;

它提供了三個功能:

  1. T getObject()

  2. Class<?> getObjectType();
  3. boolean isSingleton();

FactoryBean的生產特性 是在getBean中起做用的。

BeanPostProcessor

這個接口提供了兩個功能能:

Object postProcessBeforeInitialization(Object bean, String beanName) 
Object postProcessAfterInitialization(Object bean, String beanName)

autowiring(自動依賴裝配)的實現

Bean對Ioc容器的感知

Spring提供特定的aware接口實現Bean對Ioc容器的感知

相關文章
相關標籤/搜索