spring_04bean的生命周期
一.前言
spring框架中的bean對象生命周期是面試時常考的問題
往往筆試,面試總喜歡問生命周期的問題
二.spring_bean生命周期圖:
三.生命周期流程:
-
實例化(當我們的程序加載beans.xml文件),把我們的bean(當前情況:scope=singleton)實例化到內存
-
調用set方法設置屬性
-
如果你實現了bean名字關註接口(BeanNameAware)則,可以通過方法setBeanName獲取id號
-
如果你實現了 bean工廠關註接口,(BeanFactoryAware),則可以獲取工廠BeanFactory
-
如果你實現了 ApplicationContextAware接口,則調用方法 該方法傳遞ApplicationContext容器
-
如果bean 和 一個後置處理器(實現BeanPostProcessor接口的類)關聯,則會自動去調用 postProcessBeforeInitialization方法,註意:不用使用該bean實現接口,另外建類實現接口
<!-- 配置實現接口BeanPostProcessor的類:MyBeanPostProcessor,即後置處理器,有點類似filter --> <bean id="myBeanPostProcessor" class="com.ahd.serviceImpl.MyBeanPostProcessor"> </bean
-
如果你實現InitializingBean 接口,則會調用 afterPropertiesSet,該接口的實現類作用是初始化bean對象,默認初始化bean對象的方法是afterPropertiesSet,如果想自定義方法,可以在spring配置文件中的bean配置中,添加init-method屬性來指定使用什麽方法來初始化bean對象,系統默認先執行默認方法afterPropertiesSet,在執行自定義方法
<bean id="validateUser" init-method="myInit" class="com.ahd.serviceImpl.CheckUser1"
-
如果bean 和 一個後置處理器關聯,則會自動去調用 postProcessAfterInitialization方法
-
使用我們的bean
-
容器關閉
-
可以通過實現DisposableBean 接口來調用方法 destory
-
可以在<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的生命周期