Spring Bean 的生命周期,如何被管理的

實例化一個Bean,也就是我們通常說的new

按照Spring上下文對實例化的Bean進(jìn)行配置,也就是IOC注入

如果這個Bean實現(xiàn)了BeanNameAware接口,會調(diào)用它實現(xiàn)的setBeanName(String beanId)方法,此處傳遞的是Spring配置文件中Bean的ID

如果這個Bean實現(xiàn)了BeanFactoryAware接口,會調(diào)用它實現(xiàn)的setBeanFactory(),傳遞的是Spring工廠本身(可以用這個方法獲取到其他Bean)

如果這個Bean實現(xiàn)了ApplicationContextAware接口,會調(diào)用setApplicationContext(ApplicationContext)方法,傳入Spring上下文,該方式同樣可以實現(xiàn)步驟4,但比4更好,以為ApplicationContext是BeanFactory的子接口,有更多的實現(xiàn)方法

如果這個Bean關(guān)聯(lián)了BeanPostProcessor接口,將會調(diào)用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor經(jīng)常被用作是Bean內(nèi)容的更改,并且由于這個是在Bean初始化結(jié)束時調(diào)用After方法,也可用于內(nèi)存或緩存技術(shù)

如果這個Bean在Spring配置文件中配置了init-method屬性會自動調(diào)用其配置的初始化方法

如果這個Bean關(guān)聯(lián)了BeanPostProcessor接口,將會調(diào)用postAfterInitialization(Object obj, String s)方法

注意:以上工作完成以后就可以用這個Bean了,那這個Bean是一個single的,所以一般情況下我們調(diào)用同一個ID的Bean會是在內(nèi)容地址相同的實例

當(dāng)Bean不再需要時,會經(jīng)過清理階段,如果Bean實現(xiàn)了DisposableBean接口,會調(diào)用其實現(xiàn)的destroy方法

最后,如果這個Bean的Spring配置中配置了destroy-method屬性,會自動調(diào)用其配置的銷毀方法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容