? ? 在傳統(tǒng)的Java應(yīng)用中,Bean的生命周期非常簡單。Java的關(guān)鍵詞new用來實例化Bean(或許他是非序列化的)。這樣就夠用了。相反,Bean的生命周期在Spring容器中更加細(xì)致。理解Spring Bean的生命周期非常重要,因為你或許要利用Spring提供的機會來訂制Bean的創(chuàng)建過程。
1. 容器尋找Bean的定義信息并且將其實例化。
2.受用依賴注入,Spring按照Bean定義信息配置Bean的所有屬性。
3.如果Bean實現(xiàn)了BeanNameAware接口,工廠調(diào)用Bean的setBeanName()方法傳遞Bean的ID。
4.如果Bean實現(xiàn)了BeanFactoryAware接口,工廠調(diào)用setBeanFactory()方法傳入工廠自身。
5.如果BeanPostProcessor和Bean關(guān)聯(lián),那么它們的postProcessBeforeInitialzation()方法將被調(diào)用。
6.如果Bean指定了init-method方法,它將被調(diào)用。
7.最后,如果有BeanPsotProcessor和Bean關(guān)聯(lián),那么它們的postProcessAfterInitialization()方法將被調(diào)用。
??? 到這個時候,Bean已經(jīng)可以被應(yīng)用系統(tǒng)使用了,并且將被保留在Bean Factory中知道它不再需要。有兩種方法可以把它從Bean Factory中刪除掉。
1.如果Bean實現(xiàn)了DisposableBean接口,destory()方法被調(diào)用。
2.如果指定了訂制的銷毀方法,就調(diào)用這個方法。
??? Bean在Spring應(yīng)用上下文的生命周期與在Bean工廠中的生命周期只有一點不同,唯一不同的是,如果Bean實現(xiàn)了ApplicationContextAwre接口,setApplicationContext()方法被調(diào)用。