日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring中Bean的生命中期与InitializingBean和DisposableBean接口

發(fā)布時間:2023/11/29 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring中Bean的生命中期与InitializingBean和DisposableBean接口 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Spring提供了一些標志接口,用來改變BeanFactory中的bean的行為。它們包括InitializingBean和DisposableBean。實現(xiàn)這些接口將會導(dǎo)致BeanFactory調(diào)用前一個接口的afterPropertiesSet()方法,調(diào)用后一個接口destroy()方法,從而使得bean可以在初始化和析構(gòu)后做一些特定的動作。

在內(nèi)部,Spring使用BeanPostProcessors?來處理它能找到的標志接口以及調(diào)用適當?shù)姆椒āH绻阈枰远x的特性或者其他的Spring沒有提供的生命周期行為,你可以實現(xiàn)自己的?BeanPostProcessor。關(guān)于這方面更多的內(nèi)容可以看這里:第?3.7?節(jié)“使用BeanPostprocessors定制bean”。

所有的生命周期的標志接口都在下面敘述。在附錄的一節(jié)中,你可以找到相應(yīng)的圖,展示了Spring如何管理bean;那些生命周期的特性如何改變你的bean的本質(zhì)特征以及它們?nèi)绾伪还芾怼?/p>

1. InitializingBean / init-method

實現(xiàn)org.springframework.beans.factory.InitializingBean?接口允許一個bean在它的所有必須的屬性被BeanFactory設(shè)置后,來執(zhí)行初始化的工作。InitializingBean接口僅僅制定了一個方法:

??? * Invoked by a BeanFactory after it has set all bean properties supplied??? * (and satisfied BeanFactoryAware and ApplicationContextAware).??? * <p>This method allows the bean instance to perform initialization only??? * possible when all bean properties have been set and to throw an??? * exception in the event of misconfiguration.??? * @throws Exception in the event of misconfiguration (such??? * as failure to set an essential property) or if initialization fails.??? */??? void afterPropertiesSet() throws Exception;

注意:通常InitializingBean接口的使用是能夠避免的(而且不鼓勵,因為沒有必要把代碼同Spring耦合起來)。Bean的定義支持指定一個普通的初始化方法。在使用XmlBeanFactory的情況下,可以通過指定init-method屬性來完成。舉例來說,下面的定義:

<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>public class ExampleBean {??? public void init() {??????? // do some initialization work??? }}

同下面的完全一樣:

<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>public class AnotherExampleBean implements InitializingBean {??? public void afterPropertiesSet() {??????? // do some initialization work??? }}

但卻不把代碼耦合于Spring。

2. DisposableBean / destroy-method

實現(xiàn)org.springframework.beans.factory.DisposableBean接口允許一個bean,可以在包含它的BeanFactory銷毀的時候得到一個回調(diào)。DisposableBean也只指定了一個方法:

??? /**??? * Invoked by a BeanFactory on destruction of a singleton.??? * @throws Exception in case of shutdown errors.??? * Exceptions will get logged but not rethrown to allow??? * other beans to release their resources too.??? */??? void destroy() throws Exception;

注意:通常DisposableBean接口的使用能夠避免的(而且是不鼓勵的,因為它不必要地將代碼耦合于Spring)。?Bean的定義支持指定一個普通的析構(gòu)方法。在使用XmlBeanFactory使用的情況下,它是通過destroy-method屬性完成。舉例來說,下面的定義:

<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="destroy"/>public class ExampleBean {??? public void cleanup() {??????? // do some destruction work (like closing connection)??? }}

同下面的完全一樣:

<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>public class AnotherExampleBean implements DisposableBean {??? public void destroy() {??????? // do some destruction work??? }}

但卻不把代碼耦合于Spring。

重要的提示:當以portotype模式部署一個bean的時候,bean的生命周期將會有少許的變化。通過定義,Spring無法管理一個non-singleton/prototype bean的整個生命周期,因為當它創(chuàng)建之后,它被交給客戶端而且容器根本不再留意它了。當說起non-singleton/prototype bean的時候,你可以把Spring的角色想象成“new”操作符的替代品。從那之后的任何生命周期方面的事情都由客戶端來處理。BeanFactory中bean的生命周期將會在第3.4.1?節(jié)“生命周期接口”一節(jié)中有更詳細的敘述?.

轉(zhuǎn)載于:https://www.cnblogs.com/jiaozi-li/p/5696279.html

總結(jié)

以上是生活随笔為你收集整理的Spring中Bean的生命中期与InitializingBean和DisposableBean接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。