Spring中Bean的生命週期及其擴展點

摘要: Spring中Bean的管理是其最基本的功能,根據下面的圖來了解Spring中Bean的生命週期: 解說: (1)BeanFactoryPostProcessor的postProcessorBeanFactory()方法:若某個IoC容器內添加了實現了BeanFactoryPostProcessor接口的實現類Bean,那麼在該容器中實例化任何其餘Bean以前能夠回調該Bean中的postPrcessorBeanFactory()方法來對Bean的配置元數據進行更改,好比從XML配置文件中獲取到的配置信息。post

Spring中Bean的管理是其最基本的功能,根據下面的圖來了解Spring中Bean的生命週期:blog

解說:接口

(1)BeanFactoryPostProcessor的postProcessorBeanFactory()方法:若某個IoC容器內添加了實現了BeanFactoryPostProcessor接口的實現類Bean,那麼在該容器中實例化任何其餘Bean以前能夠回調該Bean中的postPrcessorBeanFactory()方法來對Bean的配置元數據進行更改,好比從XML配置文件中獲取到的配置信息。生命週期

(2)Bean的實例化:Bean的實例化是使用反射實現的。it

(3)Bean屬性注入:Bean實例化完成後,利用反射技術實現屬性及依賴Bean的注入。io

(4)BeanNameAware的setBeanName()方法:若是某個Bean實現了BeanNameAware接口,那麼Spring將會將Bean實例的ID傳遞給setBeanName()方法,在Bean類中新增一個beanName字段,並實現setBeanName()方法。容器

(5)BeanFactoryAware的setBeanFactory()方法:若是某個Bean實現了BeanFactoryAware接口,那麼Spring將會將建立Bean的BeanFactory傳遞給setBeanFactory()方法,在Bean類中新增了一個beanFactory字段用來保存BeanFactory的值,並實現setBeanFactory()方法。配置

(6)ApplicationContextAware的setApplicationContext()方法:若是某個Bean實現了ApplicationContextAware接口,那麼Spring將會將該Bean所在的上下文環境ApplicationContext傳遞給setApplicationContext()方法,在Bean類中新增一個ApplicationContext字段用來保存ApplicationContext的值,並實現setApplicationContext()方法。sso

(7)BeanPostProcessor預初始化方法:若是某個IoC容器中增長的實現BeanPostProcessor接口的實現類Bean,那麼在該容器中實例化Bean以後,執行初始化以前會調用BeanPostProcessor中的postProcessBeforeInitialization()方法執行預初始化處理。反射

(8)InitializingBean的afterPropertiesSet()方法:若是Bean實現了InitializingBean接口,那麼Bean在實例化完成後將會執行接口中的afterPropertiesSet()方法來進行初始化。

(9)自定義的inti-method指定的方法:若是配置文件中使用init-method屬性指定了初始化方法,那麼Bean在實例化完成後將會調用該屬性指定的初始化方法進行Bean的初始化。

(10)BeanPostProcessor初始化後方法:若是某個IoC容器中增長的實現BeanPostProcessor接口的實現類Bean,那麼在該容器中實例化Bean以後而且完成初始化調用後執行該接口中的postProcessorAfterInitialization()方法進行初始化後處理。

(11)使用Bean:此時有關Bean的全部準備工做均已完成,Bean能夠被程序使用了,它們將會一直駐留在應用上下文中,直到該上下文環境被銷燬。

(12)DisposableBean的destory()方法:若是Bean實現了DisposableBean接口,Spring將會在Bean實例銷燬以前調用該接口的destory()方法,來完成一些銷燬以前的處理工做。

(13)自定義的destory-method指定的方法:若是在配置文件中使用destory-method指定了銷燬方法,那麼在Bean實例銷燬以前會調用該指定的方法完成一些銷燬以前的處理工做。

注意:

一、BeanFactoryPostProcessor接口與BeanPostProcessor接口的做用範圍是整個上下文環境中,使用方法是單獨新增一個類來實現這些接口,那麼在處理其餘Bean的某些時刻就會回調響應的接口中的方法。

二、BeanNameAware、BeanFactoryAware、ApplicationContextAware的做用範圍的Bean範圍,即僅僅對實現了該接口的指定Bean有效,全部其使用方法是在要使用該功能的Bean本身來實現該接口。

三、第8點與第9點所述的兩個初始化方法做用是同樣的,咱們徹底可使用其中的一種便可,通常狀況咱們使用第9點所述的方式,儘可能少的去來Bean中實現某些接口,保持其獨立性,低耦合性,儘可能不要與Spring代碼耦合在一塊兒。第12和第13也是如此。

相關文章
相關標籤/搜索