1. 程式人生 > >spring_04bean的生命周期

spring_04bean的生命周期

獲取 作用 程序 val spring框架 ati single under 後置處理器

一.前言 

  spring框架中的bean對象生命周期是面試時常考的問題

  往往筆試,面試總喜歡問生命周期的問題

二.spring_bean生命周期圖:

  技術分享圖片

三.生命周期流程: 

  1. 實例化(當我們的程序加載beans.xml文件),把我們的bean(當前情況:scope=singleton)實例化到內存

  2. 調用set方法設置屬性

  3. 如果你實現了bean名字關註接口(BeanNameAware)則,可以通過方法setBeanName獲取id號

  4. 如果你實現了 bean工廠關註接口,(BeanFactoryAware),則可以獲取工廠BeanFactory

  5. 如果你實現了 ApplicationContextAware接口,則調用方法 該方法傳遞ApplicationContext容器

  6. 如果bean 和 一個後置處理器(實現BeanPostProcessor接口的類)關聯,則會自動去調用 postProcessBeforeInitialization方法,註意:不用使用該bean實現接口,另外建類實現接口

        <!-- 配置實現接口BeanPostProcessor的類:MyBeanPostProcessor,即後置處理器,有點類似filter -->
        <bean id="myBeanPostProcessor" class="com.ahd.serviceImpl.MyBeanPostProcessor">
        </bean
    >

  7. 如果你實現InitializingBean 接口,則會調用 afterPropertiesSet,該接口的實現類作用是初始化bean對象,默認初始化bean對象的方法是afterPropertiesSet,如果想自定義方法,可以在spring配置文件中的bean配置中,添加init-method屬性來指定使用什麽方法來初始化bean對象,系統默認先執行默認方法afterPropertiesSet,在執行自定義方法

    <bean id="validateUser" init-method="myInit" class="com.ahd.serviceImpl.CheckUser1"
    > <property name="username"> <value>愛華頓g</value> </property> <property name="password" value="123456"></property> </bean>

  8. 如果bean 和 一個後置處理器關聯,則會自動去調用 postProcessAfterInitialization方法

  9. 使用我們的bean

  10. 容器關閉

  11. 可以通過實現DisposableBean 接口來調用方法 destory

  12. 可以在<bean destory-method=”fun1”/> 調用定制的銷毀方法

    <bean id="validateUser" destroy-method="mydestory" class="com.ahd.serviceImpl.CheckUser1">
            <property name="username">
                <value>愛華頓g</value>
            </property>
            <property name="password" value="123456"></property>
        </bean>

四.測試運行結果

  技術分享圖片

五.總結 

  小結: 我們實際開發中往往,沒有用的這麽的過程,常見的是:

  1->2->6->10->9->11

  問題:通過BeanFactory來獲取bean對象,bean的生命周期是否和Applicationcontext 是一樣嗎?

  不是一樣的,bean是工廠中創建的生命周期會簡單一些:

spring_04bean的生命周期