天天看點

spring的init-method,destory-method, @PostConstruct,@ PreDestroy, InitializingBean

關于在spring 容器初始化 bean 和銷毀前所做的操作定義方式有三種:

第一種:通過@PostConstruct 和 @PreDestroy 方法 實作初始化和銷毀bean之前進行的操作

第二種是:通過 在xml中定義init-method 和 destory-method方法

第三種是: 通過bean實作InitializingBean和 DisposableBean接口

這些代碼執行的位置如下圖所示,以@PostConstruct 和 @PreDestroy為例

spring的init-method,destory-method, @PostConstruct,@ PreDestroy, InitializingBean

第一種方式:直接在代碼中定義

從Java EE 5規範開始,Servlet中增加了兩個影響Servlet生命周期的注解(Annotion);@PostConstruct和@PreDestroy。這兩個注解被用來修飾一個非靜态的void()方法。

被@PostConstruct修飾的方法會在伺服器加載Servle的時候運作,并且隻會被伺服器執行一次。PostConstruct在構造函數之後執行,init()方法之前執行。PreDestroy()方法在destroy()方法執行執行之後執行。

  1. package com.myapp.core.annotation.init;  
  2. import javax.annotation.PostConstruct;  
  3. import javax.annotation.PreDestroy;  
  4. public class PersonService {  
  5.     private String  message;  
  6.     public String getMessage() {  
  7.         return message;  
  8.     }  
  9.     public void setMessage(String message) {  
  10.         this.message = message;  
  11.     }  
  12.     @PostConstruct  
  13.     public void  init(){  
  14.         System.out.println("I'm  init  method  using  @PostConstrut...."+message);  
  15.     }  
  16.     @PreDestroy  
  17.     public void  dostory(){  
  18.         System.out.println("I'm  destory method  using  @PreDestroy....."+message);  
  19.     }  
  20. }  

第二種方式:在xml中配置 init-method和 destory-method方法

隻是定義spring 容器在初始化bean 和容器銷毀之前的所做的操作

基于xml的配置隻是一種方式:

  1. <bean id="personService" class="com.myapp.core.beanscope.PersonService" scope="singleton"  init-method="init"  destroy-method="cleanUp">  
  2. </bean>  

第三種:實作InitializingBean和 DisposableBean接口

在Spring中,InitializingBean和DisposableBean是兩個标記接口,為Spring執行時bean的初始化和銷毀某些行為時的有用方法。

對于Bean實作 InitializingBean,它将運作 afterPropertiesSet()在所有的 bean 屬性被設定之後。

對于 Bean 實作了DisposableBean,它将運作 destroy()在 Spring 容器釋放該 bean 之後。

但不建議使用InitializingBean和DisposableBean的接口,因為它将你的代碼緊耦合到 Spring 代碼中。 一個更好的做法應該是在bean的配置檔案屬性指定 init-method和destroy-method。

spring的init-method,destory-method, @PostConstruct,@ PreDestroy, InitializingBean