Spring中Bean的生命週期是一個困擾了我好久的問題,在網上找的各類五花八門的答案看的我是眼花繚亂,一頭霧水,外加一大堆看不懂的代碼更是搞的我雲裏霧裏,在通過了長久的概括總結思考,終於理清了這其中的邏輯。spring
Spring Bean的生命週期其實能夠圍繞如下一段配置文件展開:框架
1 <bean id="student" class="com.wx.test.entity.Student"> 2 <property name="name" value="小明"/> 3 <property name="age" value="12"/> 4 </bean>
以上是一段很簡單的代碼,用來建立bean並注入相關屬性(姓名、年齡),這就是bean的生命週期的起始。固然這只是簡單的表現,Bean的生命週期實際上比這複雜,由於這其中涉及到不少接口須要去實現,這些接口咱們不多會關心,我總結出的bean的生命週期大體能夠分爲如下幾個步驟: post
① Spring IoC容器找到關於Bean的定義並實例化該Bean。 ② Spring IoC容器對Bean進行依賴注入。 ③ 若是Bean實現了BeanNameAware接口,則將該Bean的id傳給setBeanName方法。 ④ 若是Bean實現了BeanFactoryAware接口,則將BeanFactory對象傳給setBeanFactory方法。 ⑤ 若是Bean實現了BeanPostProcessor接口,則調用其postProcessBeforeInitialization方法。 ⑥ 若是Bean實現了InitializingBean接口,則調用其afterPropertySet方法。 ⑦ 若是有和Bean關聯的BeanPostProcessors對象,則這些對象的postProcessAfterInitialization方法被調用。 ⑧ 當一個bean再也不被調用時將從bean容器中移除。 ⑨ 當銷燬Bean實例時,若是Bean實現了DisposableBean接口,則調用其destroy方法。
若是你以爲以上還有有些複雜,那麼你能夠大概這樣理解:spa
最後補充一些內容,看不明白能夠不看:code
Spring bean factory 負責管理在 spring 容器中被建立的 bean 的生命週期。Bean 的生命週期由兩組回調(call back)方法組成。 - 初始化以後調用的回調方法。 - 銷燬以前調用的回調方法。 Spring 框架提供瞭如下四種方式來管理 bean 的生命週期事件: - InitializingBean 和 DisposableBean 回調接口 - 針對特殊行爲的其餘 Aware 接口 - Bean 配置文件中的 Custom init() 方法和 destroy() 方法 - @PostConstruct 和 @PreDestroy 註解方式