Spring bean 的初始化和銷燬的三種方式和執行順序
- 通過實現InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作方法;
- 通過<bean> 元素的init-method/destroy-method屬性指定初始化之後 /銷燬之前呼叫的操作方法;
- 在指定方法上加上@PostConstruct或@PreDestroy註解來制定該方法是在初始化之後還是銷燬之前呼叫。
這幾種配置方式,執行順序是怎樣的呢?我們通過例子來研究下:
Bean的列子類:InitBeanAndDestroyBean.java
package com.chenfeng.xiaolyuh.entity; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; public class InitBeanAndDestroyBean implements InitializingBean, DisposableBean { public String say() { return "Hello!" + this.getClass().getName(); } public InitBeanAndDestroyBean() { System.out.println("執行InitBeanAndDestroyBean構造方法"); } @Override public void destroy() throws Exception { System.out.println("介面-執行InitBeanAndDestroyBeanTest:destroy方法"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("介面-執行InitBeanAndDestroyBeanTest:afterPropertiesSet方法"); } @PostConstruct public void postConstructstroy() { System.out.println("註解-執行InitBeanAndDestroyBeanTest:preDestroy方法"); } @PreDestroy public void preDestroy() { System.out.println("註解--執行InitBeanAndDestroyBeanTest:preDestroy方法"); } public void initMethod() { System.out.println("XML配置-執行InitBeanAndDestroyBeanTest:init-method方法"); } public void destroyMethod() { System.out.println("XML配置-執行InitBeanAndDestroyBeanTest:destroy-method方法"); } }
Spring配置類MyConfig.java
測試類SpringIocTest.java@Configuration // 宣告成配置檔案 @ComponentScan("com.chenfeng.xiaolyuh") // 掃描包 public class MyConfig { // 測試Bean的幾種初始化和銷燬方式,和執行順序 @Bean(initMethod="initMethod", destroyMethod="destroyMethod") public InitBeanAndDestroyBean initBeanAndDestroyBean() { return new InitBeanAndDestroyBean(); } }
public class SpringIocTest { // 使用容器 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class, CatEntity.class); @Test public void contextTest() { // 測試Bean的三種初始化、銷燬方式和執行順序 System.out.println(context.getBean(InitBeanAndDestroyBean.class)); } @After public void closeContext() { context.close(); } }
列印結果:
三月 10, 2017 1:47:02 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
資訊: Refreshing org.spring[email protected]3b22cdd0: startup date [Fri Mar 10 13:47:02 CST 2017]; root of context hierarchy
執行InitBeanAndDestroyBean構造方法
註解-執行InitBeanAndDestroyBeanTest:preDestroy方法
介面-執行InitBeanAndDestroyBeanTest:afterPropertiesSet方法
XML配置-執行InitBeanAndDestroyBeanTest:init-method方法
三月 10, 2017 1:47:02 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext doClose
資訊: Closing org.spring[email protected]3b22cdd0: startup date [Fri Mar 10 13:47:02 CST 2017]; root of context hierarchy
註解--執行InitBeanAndDestroyBeanTest:preDestroy方法
介面-執行InitBeanAndDestroyBeanTest:destroy方法
XML配置-執行InitBeanAndDestroyBeanTest:destroy-method方法
從執行結果可以看出:
- Bean在例項化的過程中:Constructor > @PostConstruct >InitializingBean > init-method
- Bean在銷燬的過程中:@PreDestroy > DisposableBean > destroy-method
相關推薦
Spring管理的bean初始化方法的三種方式,以及@PostConstruct不起作用的原因
1:Spring 容器中的 Bean 是有生命週期的,spring 允許 Bean 在初始化完成後以及銷燬前執行特定的操作。下面是常用的三種指定特定操作的方法: 通過實現InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作
Spring bean的初始化和銷燬三種方式及優先順序
Spring bean的初始化和銷燬有三種方式 通過實現 InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作方法;優先順序第二 通過 元素的 init-method/destroy-method屬性指定初始化之
Spring Bean初始化之後/銷燬之前執行指定方法
關於在spring 容器初始化 bean 和銷燬前所做的操作定義方式有三種: 通過@PostConstruct 和 @PreDestroy 方法 實現初始化和銷燬bean之前進行的操作 通過 在xml中定義init-method 和 destory-metho
spring(bean初始化、銷燬、注入,作用域)
IOC:控制反轉,也稱為依賴注入(DI)。這是一個過程。通常我們需要一個物件的時候,是主動建立物件,並且主動傳入到需要使用該物件的地方。而IOC則是由容器建立物件,注入到我們需要使用該物件的位置,兩者相比,一個主動,一個被動,被動的則是稱為依賴注入(控制反轉,由主動建立改為被動注入)。IO
JAVA中初始化ArrayList的三種方式
下面講一下ArrayList初始化的幾種不同方式。 一、最常用的初始化方式。 1 List<String> list1 = new ArrayList<String>(); 2 list1.add("apple"); 3 lis
spring boot初始化資源的幾種方式
轉自:https://www.jb51.net/article/145143.htm 實現 CommandLineRunner 介面,並實現它的 run() 方法,在該方法中編寫初始化邏輯 @Component public class MyCommandLineRun
結構體初始化 訪問的三種方式(結構體指標)
輸出三個學生中成績最高的學生資訊 1> #include<stdio.h> typedef struct student { int num; char name[10]; int score; } Student; int m
Spring bean 的初始化和銷燬的三種方式和執行順序
Spring 容器中的 Bean 是有生命週期的,spring 允許 Bean 在初始化完成後以及銷燬前執行特定的操作。 下面是常用的三種指定特定操作的方法: 通過實現InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作方法;
Spring bean初始化與銷毀的幾種方式和區別
pack ack 構造 rop struct service() throws esc println 1. <bean> 元素的 init-method/destroy-method屬性指定初始化之後 /銷毀之前調用的操作方法 2. 指定方法上加上@PostC
Spring定義bean的三種方式和自動注入
前言:隨著一個專案規模的增大,我們不得不引入許多Java bean物件,而這些物件一般來說是在Spring的配置檔案applicationContext.xml中進行配置的,這樣就聲明瞭這是一個由Spring容器管理的bean物件。這種做法必然會導致Spring的配置檔案的
Spring Bean 初始化之InitializingBean, init-method 和 PostConstruct
概述從介面的名字上不難發現,InitializingBean 的作用就是在 bean 初始化後執行定製化的操作。Spring 容器中的 Bean 是有生命週期的,Spring 允許在 Bean 在初始化完成後以及 Bean 銷燬前執行特定的操作,常用的設定方式有以下三種:通過實現 InitializingBe
🙈羞,Spring Bean 初始化/銷燬竟然有這麼多姿勢
文章來源:http://1t.click/bfHN 一、前言 日常開發過程有時需要在應用啟動之後載入某些資源,或者在應用關閉之前釋放資源。Spring 框架提供相關功能,圍繞 Spring Bean 生命週期,可以在 Bean 建立過程初始化資源,以及銷燬 Bean 過程釋放資源。Spring 提供多
Jquery 頁面初始化常用的三種方法以及Jquery 發送ajax 請求
tree error 渲染 erro 發生 har 初始化 nload 事情 第一種 $(document).ready(function(){ //文檔就緒事件 }); 第二種是第一種的簡略寫法,效果上和第一種是等效的。 $(function(){ //文檔加載事
jQuery頁面加載初始化常用的三種方法
ini ready document 加載 clas 初始 ora win eth 當頁面打開時我們需要執行一些操作,這個時候如果我們選擇使用jquery的話,需要重寫他的3中方法,自我感覺沒什麽區 別,看個人喜好了,第二種感覺比較簡單明了: 第一種: 復制代碼代碼如下:
Spring Bean初始化之後執行指定方法
轉載:https://blog.csdn.net/forever7107/article/details/76446544 常用的設定方式有以下三種: 通過實現 InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作方法; 通過 <bean&g
spring在web容器啟動時執行初始化方法(四種方式)
需求:在tomcat啟動時開啟一個定時任務,或初始化slor索引 想法:容器啟動時執行方法,最容易想到的就是servlet中可以配置load-on-startup,設定一個正整數也就可以隨容器一起啟動。 問題:上面的方法很好,但是由於定時任務需要去操作資料庫,而專案
Spring bean初始化原理詳解
一、 閒言 使用spring已經多年,卻從來沒有仔細研究過spring bean的初始化過程以及原理。知其然而不知其所以然,當面遇到比較深度的問題的時候,就無法解決或者需要花費大量問題方可解決。 二、 目的 本文主要想解決以下幾個問題,希望大家看完本文以後,能得出答案
spring 初始化ApplicationContext的幾種方式
最近做專案需要用到getBean(),在網上搜索之後發現有很多種方式獲取ApplicationContext,做了些許嘗試,解決了我的問題,決定把搜到的東西進行彙總,供大家學習。 方法一:Fi
jQuery頁面載入初始化常用的三種方法
當頁面開啟時我們需要執行一些操作,下面為大家介紹三種不錯的方法,大家可以參考下 當頁面開啟時我們需要執行一些操作,這個時候如果我們選擇使用jquery的話,需要重寫他的3中方法,自我感覺沒什麼區
Spring Boot中初始化資源的幾種方式
假設有這麼一個需求,要求在專案啟動過程中,完成執行緒池的初始化,加密證書載入等功能,你會怎麼做?如果沒想好答案,請接著往下看。今天介紹幾種在Spring Boot中進行資源初始化的方式,幫助大家解決和回答這個問題。CommandLineRunner定義初始化類 MyCommandL