Spring配置使用之Bean生命周期詳解
基本概念
Spring 中的 Bean 的生命周期,指的是 Bean 從創(chuàng)建到銷毀的過程。
下面來探究下幾個有關 Bean 生命周期配置的屬性。
lazy-init
lazy-init 表示延遲加載 Bean,默認在 Spring IoC 容器初始化時會實例化所有在配置文件定義的 Bean,若啟用了 lazy-init 則在調用 Bean 時才會去創(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" />
調用驗證:
// 創(chuàng)建容器 String location = ... ApplicationContext factory = new FileSystemXmlApplicationContext(location); // 輸出結果: // 若啟用了 lazy-init 則輸出 creating...,否則無打印信息。
depends-on
depends-on 是指指定 Bean 初始化及銷毀時的順序。該屬性可以用于標識當前 Bean 初始化之前顯式地強制一個或多個 Bean 被初始化。若指定 Bean 的作用域都是 singleton 時,表示該屬性指定的 Bean 要在當前 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" />
調用驗證:
String location = ... ApplicationContext factory = new FileSystemXmlApplicationContext(location); BeanOne beanOne= (BeanOne)factory.getBean("beanOne"); // 輸出結果: // BeanTwo... // BeanOne...
觀察輸出結果,調用 BeanOne 時,Spring 會自動創(chuàng)建 BeanTwo 實例。
init-method & destory-method
當實例化一個 Bean 時,可能需要執(zhí)行一個初始化操作來確保該 Bean 可用狀態(tài)。同樣地,當不需要 Bean 時,將其從容器中移除時,可能還需要按順序執(zhí)行一些清楚工作。
為 Bean 定義初始化和銷毀操作,需要使用 init-method 和 destory-method 屬性。
定義 Bean
// 進入房間后要開燈,離開房間后要關燈 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 容器中實例化該 Bean,在銷毀它
// 實例化 Bean FileSystemXmlApplicationContext context = ... // 銷毀 Bean context.registerShutdownHook(); // 輸出內容: // enter room... // turn on... // turn off...
總結
以上就是本文關于Spring配置使用之Bean生命周期詳解的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Spring中bean的繼承與抽象代碼示例、spring中的FactoryBean代碼示例等,有什么問題,歡迎大家留言交流討論。感謝朋友們對腳本之家網(wǎng)站的支持!
相關文章
SpringBoot使用@ControllerAdvice全局異常處理
這篇文章主要介紹了SpringBoot使用@ControllerAdvice全局異常處理,異常處理是非常重要的一部分,它可以幫助我們捕獲并處理應用程序中出現(xiàn)的異常情況,提高應用程序的健壯性和可靠性,需要的朋友可以參考下2023-07-07SpringBoot 項目中的圖片處理策略之本地存儲與路徑映射
在SpringBoot項目中,靜態(tài)資源存放在static目錄下,使得前端可以通過URL來訪問這些資源,我們就需要將文件系統(tǒng)的文件路徑與URL建立一個映射關系,把文件系統(tǒng)中的文件當成我們的靜態(tài)資源即可,本文給大家介紹SpringBoot本地存儲與路徑映射的相關知識,感興趣的朋友一起看看吧2023-12-12Java數(shù)據(jù)結構之隊列的簡單定義與使用方法
這篇文章主要介紹了Java數(shù)據(jù)結構之隊列的簡單定義與使用方法,簡單描述了隊列的功能、特點,并結合java實例形式分析了隊列的簡單定義與使用方法,需要的朋友可以參考下2017-10-10SpringBoot集成Hadoop對HDFS的文件操作方法
這篇文章主要介紹了SpringBoot集成Hadoop對HDFS的文件操作方法,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-07-07Java BeanMap實現(xiàn)Bean與Map的相互轉換
這篇文章主要介紹了利用BeanMap進行對象與Map的相互轉換,通過net.sf.cglib.beans.BeanMap類中的方法來轉換,效率極高,本文給大家分享實現(xiàn)代碼,感興趣的朋友一起看看吧2022-11-11Spring boot監(jiān)控Actuator-Admin實現(xiàn)過程詳解
這篇文章主要介紹了Spring boot監(jiān)控Actuator-Admin實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09