Spring IOC容器創建過程

直接上圖吧。這是SpringIOC容器創建的整個過程

總共有12大步。設計者採用了模板方法模式,把這個12步固定寫了下來,在一個抽象的容器裏(AbstractApplicationContext),具體容器必須繼承這個類來實現一些空的模板方法。

從spring IOC容器整個創建過程可以看出Spring給我們提供了兩大利器來對程序進行擴展。所謂的容器本質就是一個ConcurrentHashMap來保存着創建好的單實例Bean。

1. PostProcessor

提供了若干後置處理器接口來對工廠以及Bean創建前後進行攔截,IOC刷新流程是一個完整的模板,spring後面大部分功能都是基於後置處理器來實現的。下面列出幾個關鍵的後置處理器

1)BeanFactoryPostProcessor在工廠標準初始化之後,尚未創建對象前,對工廠進行後置處理工作。

2)BeanDefinitionRegistryPostProcessor繼承了BeanFactoryPostProcessor,提供了postProcessBeanDefinitionRegistry方法讓我們可以動態的添加Bean定義信息。

3) BeanPostProcessor 接口是在Bean創建對象之後,初始化前後進行攔截。

4) InstanationAwareBeanPostProcessor 接口繼承了BeanPostProcessor接口,可以在bean創建對象前後進行攔截

以上四個後置處理器的調用順序是:

BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry ->

BeanDefinitionRegistryPostProcessor.postProcessBeanFactory ->

BeanFactoryPostProcessor.postProcessBeanFactory -> 

InstanationAwareBeanPostProcessor.postProcessBeforeInstanation ->

constructor.newInstance()創建Bean實例 ->

InstanationAwareBeanPostProcessor.postProcessAfterInstanation -> 

bean實例設置屬性值 -> 

BeanPostProcessor.postProcessBeforeInitialization -> 

調用bean初始化方法

BeanPostProcessor.postProcessAfterInitialization

2.事件驅動

Spring容器給我們創建了一個事件派發器,通過調用IOC容器的pushEvent方法,就可以給實現了ApplicationListener接口的事件監聽器派發事件

 

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