您好,登錄后才能下訂單哦!
這篇文章主要介紹了Spring配置使用之Bean生命周期的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
基本概念
Spring 中的 Bean 的生命周期,指的是 Bean 從創(chuàng)建到銷毀的過程。
下面來探究下幾個(gè)有關(guān) Bean 生命周期配置的屬性。
lazy-init
lazy-init 表示延遲加載 Bean,默認(rèn)在 Spring IoC 容器初始化時(shí)會(huì)實(shí)例化所有在配置文件定義的 Bean,若啟用了 lazy-init 則在調(diào)用 Bean 時(shí)才會(huì)去創(chuàng)建 Bean。
定義 Bean:
public class Animals { public Animals(){ System.out.println("creating..."); } }
配置方式如下(以 xml 文件為例):
<!-- 表示啟用了延遲加載 --> <bean id="animals" class="com.demo.Animals" lazy-init="true"/> <!-- 不啟用延遲加載 --> <bean id="animals" class="com.demo.Animals" lazy-init="default"/> <bean id="animals" class="com.demo.Animals" />
調(diào)用驗(yàn)證:
// 創(chuàng)建容器 String location = ... ApplicationContext factory = new FileSystemXmlApplicationContext(location); // 輸出結(jié)果: // 若啟用了 lazy-init 則輸出 creating...,否則無打印信息。
depends-on
depends-on 是指指定 Bean 初始化及銷毀時(shí)的順序。該屬性可以用于標(biāo)識(shí)當(dāng)前 Bean 初始化之前顯式地強(qiáng)制一個(gè)或多個(gè) Bean 被初始化。若指定 Bean 的作用域都是 singleton 時(shí),表示該屬性指定的 Bean 要在當(dāng)前 Bean 銷毀之前被銷毀。
在 Bean 中定義:
public class BeanOne{ public BeanOne(){ System.out.println("BeanOne..."); } } public class BeanTwo{ public BeanTwon(){ System.out.println("BeanTwo..."); } }
在配置文件中定義:
<bean id="beanOne" class="com.demo.BeanOne" lazy-init="true" depends-on="beanTwo" /> <bean id="beanTwo" class="com.demo.BeanTwo" lazy-init="true" />
調(diào)用驗(yàn)證:
String location = ... ApplicationContext factory = new FileSystemXmlApplicationContext(location); BeanOne beanOne= (BeanOne)factory.getBean("beanOne"); // 輸出結(jié)果: // BeanTwo... // BeanOne...
觀察輸出結(jié)果,調(diào)用 BeanOne 時(shí),Spring 會(huì)自動(dòng)創(chuàng)建 BeanTwo 實(shí)例。
init-method & destory-method
當(dāng)實(shí)例化一個(gè) Bean 時(shí),可能需要執(zhí)行一個(gè)初始化操作來確保該 Bean 可用狀態(tài)。同樣地,當(dāng)不需要 Bean 時(shí),將其從容器中移除時(shí),可能還需要按順序執(zhí)行一些清楚工作。
為 Bean 定義初始化和銷毀操作,需要使用 init-method 和 destory-method 屬性。
定義 Bean
// 進(jìn)入房間后要開燈,離開房間后要關(guān)燈 public class Room { public Room(){ System.out.println("enter room..."); } public void turnOnLights(){ System.out.println("turn on..."); } public void turnOffLights(){ System.out.println("turn off..."); } }
在 Xml 文件中配置
<bean class="com.demo.Room" init-method="turnOnLights" destroy-method="turnOffLights"/>
在 Ioc 容器中實(shí)例化該 Bean,在銷毀它
// 實(shí)例化 Bean FileSystemXmlApplicationContext context = ... // 銷毀 Bean context.registerShutdownHook(); // 輸出內(nèi)容: // enter room... // turn on... // turn off...
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Spring配置使用之Bean生命周期的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。