1. 程式人生 > >Bean的初始化和銷燬(java配置方式)

Bean的初始化和銷燬(java配置方式)

bean生命週期管理

spring對bean的生命週期的操作提供了支援,在使用java配置和註解配置下提供瞭如下兩種方式:
1、java配置:使用@Bean 的initMethod和destoyMethod
2、註解方式:@PostConstruct和@PreDestroy
java配置是通過@Configuration與@Bean來實現的, spring4.x和springboot都推薦使用java配置,它可以完全替代xml配置
使用 @Configuration 註解表明當前類是一個配置類,這個類裡可能有0或多個 @Bean註解。
:為什麼不直接用@Component來注入一個bean?
一般情況使用@Component裝配Bean,但它只能註解在類上,不能註解在方法上,對於Java而言,大部分的開發都需要引入第三方包,而且往往看不到原始碼,所以就無法為這些類新增@Component註解讓他們變為開發環境的Bean,而spring提供的@Bean註解可以解決這一問題。
使用@Bean 註解標註一個方法(而且只能使用在方法上),表明當前方法的返回值是一個Bean,Bean的名稱是方法名,也可以通過name屬性設定beanName。如@Bean(name = “dataSource”)
程式碼如下:

//用@Bean來定義
public class BeanWayService {
    public void init(){
        System.out.println("@Bean-init-method");
    }
    public void destroy(){
        System.out.println("@Bean-destroy-method");
    }
    public BeanWayService(){
        super();
        System.out.println("初始化建構函式。。");
    }
}
//@PostConstruct和@PreDestroy
public class BeanWay2Service {
    @PostConstruct
    public void init(){
        System.out.println("@Bean-postConstruct");
    }
    @PreDestroy
    public void destroy(){
        System.out.println("@Bean-preDestroy");
    }
    public BeanWay2Service(){
        super();
        System.out.println("初始化建構函式。。");
    }
}
@Configuration
@ComponentScan("com.changhf.javaconfig")
public class PrePostConfig {
	//方法一
    @Bean(initMethod = "init", destroyMethod = "destroy")
    BeanWayService beanWayService() {
        return new BeanWayService();
    }
	//方法二
    @Bean
    BeanWay2Service beanWay2Service() {
        return new BeanWay2Service();
    }
}
public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PrePostConfig.class);
        context.close();
    }
}

@PostConstruct,在建構函式執行完之後執行;@PreDestroy在bean銷燬之前執行
輸出結果:

初始化建構函式。。
@Bean-init-method
初始化建構函式。。
@Bean-postConstruct
@Bean-preDestroy
@Bean-destroy-method

spring的bean初始化其他方式

相比較jdk提供的@PostConstruct,spring還提供裡另外一種初始化方式:實現InitializingBean介面,它僅僅包含一個方法afterPropertiesSet(),雖然使用該介面導致程式和spring的耦合度高,但它程式碼簡潔,對於使用spring的系統來說還是首選。

@Component
public class NoticeJobQueue<T> implements InitializingBean{
	@Autowired
	protected NoticeService noticeService;
	public static NoticeJobQueue<Notice> NOTICE = null;
 
	public NoticeJobQueue() {
	}
	@Override
	public void afterPropertiesSet() throws Exception {
		NOTICE = new NoticeJobQueue<Notice>(new NoticeTask(noticeService));
		System.out.println("----------bean initialized-----------");
	}

}

相關推薦

Bean初始銷燬java配置方式

bean生命週期管理 spring對bean的生命週期的操作提供了支援,在使用java配置和註解配置下提供瞭如下兩種方式: 1、java配置:使用@Bean 的initMethod和destoyMethod 2、註解方式:@PostConstruct和@PreD

JAVAEE顛覆者,SpringBoot實戰一書學習小記Bean的Scope,Bean的動態注入,Bean初始銷燬

Bean的Scope每一個bean可以新增Scope標籤來設定個人理解從此看出Spring的控制反轉預設一直都在用一個例項注入1.Singleton 一個Spring容器中只有一個Bean的例項,此為Spring的預設配置,全容器共享一個例項。2.Prototype 每次呼叫

spring ioc---定製bean初始銷燬時的回撥函式

約莫有4種方式定製bean初始化和銷燬時的回撥函式,如下表格. 方式 說明 使用beans標籤的屬性 beans標籤中,使用以下兩個屬性, `default-init-method`和`default-destroy-m

spring-bean生命週期之初始銷燬的三種方式

1,註解bean之指定init-method/destroy-method 這種方式spring註解之@Bean註解,這邊再簡單演示如下: 配置類中增加一個bean如下: /** * 定義一個bean物件 * @return */

Spring bean初始銷燬的三種方式執行順序

Spring 容器中的 Bean 是有生命週期的,spring 允許 Bean 在初始化完成後以及銷燬前執行特定的操作。 下面是常用的三種指定特定操作的方法: 通過實現InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作方法;

FFmpeg:常見結構體的初始銷燬AVFormatContext,AVFrame等——雷神神文

===================================================== FFmpeg的庫函式原始碼分析文章列表: 【架構圖】 【通用】 【解碼】 【編碼】

FFmpeg原始碼簡單分析:常見結構體的初始銷燬AVFormatContext,AVFrame等

=====================================================FFmpeg的庫函式原始碼分析文章列表:【架構圖】【通用】【解碼】【編碼】【其它】【指令碼】【H.264】================================

【spring系列】之6:bean初始銷燬方法

bean的生命週期:bean建立---初始化----銷燬的過程 容器管理bean的生命週期:我們可以自定義初始化和銷燬方法;容器在bean進行到當前生命週期的時候來呼叫我們自定義的初始化和銷燬方法 構造(物件建立): 單例項:在容器啟動的時候建立物件 多例項:在每次獲

Spring Bean初始銷燬方式詳解

最近在專案中需要封裝kafka的服務,其中使用到了工廠模式,該模式涉及到了Spring Bean的初始化和銷燬,如是研究了一番,總結如下,和大家共勉之 Spring Bean的初始化和銷燬Bean有幾種方法了?答案是3種 方法一:使用@PostConstruct註解初始化,

Spring bean初始銷燬三種方式及優先順序

  Spring bean的初始化和銷燬有三種方式   通過實現 InitializingBean/DisposableBean 介面來定製初始化之後/銷燬之前的操作方法;優先順序第二   通過 元素的 init-method/destroy-method屬性指定初始化之

Spring框架, bean的生命週期中,初始銷燬.

我們可以配置bean的初始化和銷燬前的方法, 有三種方法:1,在配置檔案中的<beans>標籤中配置default-init-method="defautInit" default-destroy-method="defaultDestroy"然後在bean中去寫

Java中陣列表示1一維陣列的定義、初始記憶體中陣列的表示

各個語言中都有陣列,但Java中是有區別的,Java中只有一維陣列,沒有多維陣列,多維陣列使用陣列的陣列來表示的。所以下面介紹的陣列主要以一維陣列來表示。 1.陣列的定義 陣列型別也是一種型別,本身是一種引用型別,例如int是一個基本資料型別,但是int[]就是一種引用資

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

Spring Bean初始之後/銷燬之前執行指定方法

關於在spring  容器初始化 bean 和銷燬前所做的操作定義方式有三種: 通過@PostConstruct 和 @PreDestroy 方法 實現初始化和銷燬bean之前進行的操作 通過 在xml中定義init-method 和  destory-metho

spring(bean初始銷燬、注入,作用域)

IOC:控制反轉,也稱為依賴注入(DI)。這是一個過程。通常我們需要一個物件的時候,是主動建立物件,並且主動傳入到需要使用該物件的地方。而IOC則是由容器建立物件,注入到我們需要使用該物件的位置,兩者相比,一個主動,一個被動,被動的則是稱為依賴注入(控制反轉,由主動建立改為被動注入)。IO

【Spring學習筆記】4:三種做屬性連線的Annotation,指示初始銷燬方法的Annotation

屬性連線 屬性連線是指配置DI的方式,之前學了可以在<bean ...></bean>裡面使用<constructor-arg .../>和<property .../> 元素做屬性連線。 Spring裡還可以

echarts 常用方法 初始銷燬

縱觀ECharts圖表例項化的API,主要有一下幾個相關的例項化方法:1、setOption(Object option,{boolean = true} notMerge)引數:1)、Object型別的引數 option,表示圖表資料結構 ,形如:1.var option