Spring框架, bean的生命週期中,初始化和銷燬.
我們可以配置bean的初始化和銷燬前的方法, 有三種方法:
1,在配置檔案中的<beans>標籤中配置
default-init-method="defautInit" default-destroy-method="defaultDestroy"
然後在bean中去寫定義"defautlinit"和"defaultDestroy"方法:
public voiddefautInit() {
System.out.println("bean的銷燬方法..");
}
public void defaultDestroy() {
System.out.println("初始化方法..");
}
2, 還是在配置檔案中, 但是是在具體的bean標籤中配置:
<bean id="helloWorld"
class="main.java.com.sommer.learn.HelloWorldImpl"
init-method = "start"
scope="prototype"
destroy-method="cleanup"
scope="prototype">
然後在這個HelloWorldImplbean裡定義相應的兩個方法:
public void start(){
System.out.println("ioc容器初始化前會初始化bean");
System.out.println("bean初始化前會呼叫的方法");
}
public void cleanup(){
System.out.println("ioc容器銷燬前會先銷燬bean");
System.out.println("bean銷燬前會呼叫的方法");
}
3, 在bean中實現InitializingBean,DisposableBean介面,實現介面中的方法:@Override
public void destroy() throws Exception {
System.out.println("bean的銷燬方法..");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("初始化方法..");
}
出現了一個問題, 我測試的時候發現初始化ioc時, 初始化bean方法是陪成功被觸發了,比如start(), afterPropertiesSet(), defautInit(). 但是執行ioc的銷燬方法destroy()後沒去執行關於銷燬bean的方法, cleanup(), defaultDestroy(),afterPropertiesSet()....
原因是在bean裡配置了的bean作用域: scope="prototype" ... prototype屬性. 其實上面的測試,bean的銷燬是依賴ioc的銷燬而自動銷燬的. 但是prototype屬性的bean, ioc是不管的, 需要我們自己來解決.所以在用destroy()方法銷燬ioc容器的時候,並未去銷燬裡面的prototype屬性的bean, 所以也沒有呼叫之前定義的bean銷燬前方法.....
prototype作用域部署的bean,每一次請求(將其注入到另一個bean中,或者以程式的方式呼叫容器的getBean()方法)都會產生一個新的bean例項,相當與一個new的操作,對於prototype作用域的bean,有一點非常重要,那就是Spring不能對一個prototype bean的整個生命週期負責,容器在初始化、配置、裝飾或者是裝配完一個prototype例項後,將它交給客戶端,隨後就對該prototype例項不聞不問了。不管何種作用域,容器都會呼叫所有物件的初始化生命週期回撥方法,而對prototype而言,任何配置好的析構生命週期回撥方法都將不會被呼叫。清除prototype作用域的物件並釋放任何prototype bean所持有的昂貴資源,都是客戶端程式碼的職責。
(讓Spring容器釋放被singleton作用域bean佔用資源的一種可行方式是,通過使用bean的後置處理器,該處理器持有要被清除的bean的引用。)
相關推薦
Spring框架, bean的生命週期中,初始化和銷燬.
我們可以配置bean的初始化和銷燬前的方法, 有三種方法:1,在配置檔案中的<beans>標籤中配置default-init-method="defautInit" default-destroy-method="defaultDestroy"然後在bean中去寫
spring-bean生命週期之初始化和銷燬的三種方式
1,註解bean之指定init-method/destroy-method 這種方式spring註解之@Bean註解,這邊再簡單演示如下: 配置類中增加一個bean如下: /** * 定義一個bean物件 * @return */
【spring系列】之6:bean的初始化和銷燬方法
bean的生命週期:bean建立---初始化----銷燬的過程 容器管理bean的生命週期:我們可以自定義初始化和銷燬方法;容器在bean進行到當前生命週期的時候來呼叫我們自定義的初始化和銷燬方法 構造(物件建立): 單例項:在容器啟動的時候建立物件 多例項:在每次獲
spring ioc---定製bean初始化和銷燬時的回撥函式
約莫有4種方式定製bean初始化和銷燬時的回撥函式,如下表格. 方式 說明 使用beans標籤的屬性 beans標籤中,使用以下兩個屬性, `default-init-method`和`default-destroy-m
Spring Bean的初始化和銷燬方式詳解
最近在專案中需要封裝kafka的服務,其中使用到了工廠模式,該模式涉及到了Spring Bean的初始化和銷燬,如是研究了一番,總結如下,和大家共勉之 Spring Bean的初始化和銷燬Bean有幾種方法了?答案是3種 方法一:使用@PostConstruct註解初始化,
Spring bean的初始化和銷燬三種方式及優先順序
Spring bean的初始化和銷燬有三種方式 通過實現 InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作方法;優先順序第二 通過 元素的 init-method/destroy-method屬性指定初始化之
Spring bean 的初始化和銷燬的三種方式和執行順序
Spring 容器中的 Bean 是有生命週期的,spring 允許 Bean 在初始化完成後以及銷燬前執行特定的操作。 下面是常用的三種指定特定操作的方法: 通過實現InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作方法;
Spring bean的初始化和銷燬
另外一個方法讓bean實現Spring的InitializingBean和DisposableBean介面,InitializingBean的afterPropertiesSet()和DisposableBean的destroy()方法分別會在bean初始化和移除應
通過Spring @PostConstruct 和 @PreDestroy 方法 實現初始化和銷燬bean之前進行的操作
關於在spring 容器初始化 bean 和銷燬前所做的操作定義方式有三種: 第一種:通過@PostConstruct 和 @PreDestroy 方法 實現初始化和銷燬bean之前進行的操作 第二種是:通過 在xml中定義init-method 和 d
【Spring】【Bean的scope屬性】【Bean的初始化和銷燬方法】
Bean的scope屬性 在Spring容器中的物件,預設是單例的.如dao,service.單例可以提高效能 但是也需要每次獲取都要new一次Bean物件.如Struts2的 Action物件,每
【Spring註解驅動開發】如何使用@Bean註解指定初始化和銷燬的方法?看這一篇就夠了!!
## 寫在前面 > 在【[String註解驅動開發專題](https://www.cnblogs.com/binghe001/category/1780611.html)】中,前面的文章我們主要講了有關於如何向Spring容器中註冊bean的知識,大家可以到【[String註解驅動開發專題](http
022 使用@Bean的屬性完成初始化和銷毀的指定
div OS pub code ostc pan per 方式 void 一 .概述 Bean的生命周期就是指,Bean的創建,初始化,銷毀的整個過程. spring幫助我們實現整個過程,但是提供了很多的回調接口,我們 可以自己定義這些方法. 一共有四種方式可以實現這些.
Vue生命週期中的created和mounted的區別
之前大部分時候都是用angular開發專案,vue寫的很少,最近有必要把vue和webpack重新整理一下了。下面我們先看一下Vue生命週期中的created和mounted的區別。 我們先看一張圖(這張圖是借鑑別人的,嘻嘻,在此感謝) created:創造的;建立 mounted: 安裝
JAVAEE顛覆者,SpringBoot實戰一書學習小記(Bean的Scope,Bean的動態注入,Bean初始化和銷燬)
Bean的Scope每一個bean可以新增Scope標籤來設定個人理解從此看出Spring的控制反轉預設一直都在用一個例項注入1.Singleton 一個Spring容器中只有一個Bean的例項,此為Spring的預設配置,全容器共享一個例項。2.Prototype 每次呼叫
Bean的初始化和銷燬(java配置方式)
bean生命週期管理 spring對bean的生命週期的操作提供了支援,在使用java配置和註解配置下提供瞭如下兩種方式: 1、java配置:使用@Bean 的initMethod和destoyMethod 2、註解方式:@PostConstruct和@PreD
【Spring學習筆記】4:三種做屬性連線的Annotation,指示初始化和銷燬方法的Annotation
屬性連線 屬性連線是指配置DI的方式,之前學了可以在<bean ...></bean>裡面使用<constructor-arg .../>和<property .../> 元素做屬性連線。 Spring裡還可以
FFmpeg:常見結構體的初始化和銷燬(AVFormatContext,AVFrame等)——雷神神文
===================================================== FFmpeg的庫函式原始碼分析文章列表: 【架構圖】 【通用】 【解碼】 【編碼】
FFmpeg原始碼簡單分析:常見結構體的初始化和銷燬(AVFormatContext,AVFrame等)
=====================================================FFmpeg的庫函式原始碼分析文章列表:【架構圖】【通用】【解碼】【編碼】【其它】【指令碼】【H.264】================================
echarts 常用方法 初始化和銷燬
縱觀ECharts圖表例項化的API,主要有一下幾個相關的例項化方法:1、setOption(Object option,{boolean = true} notMerge)引數:1)、Object型別的引數 option,表示圖表資料結構 ,形如:1.var option
Spring Boot實戰筆記(三)-- Spring常用配置(Bean的初始化和銷毀、Profile)
div nbsp troy string 實例化 public ive work 初始 一、Bean的初始化和銷毀 在我們的實際開發的時候,經常會遇到Bean在使用之前或之後做些必要的操作,Spring對Bean的生命周期操作提供了支持。在使用Java配置和註解配置下提