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


关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种:
第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
第二种是:通过 在xml中定义init-method 和 destory-method方法
第三种是: 通过bean实现InitializingBean和 DisposableBean接口

这些代码执行的位置如下图所示,以@PostConstruct 和 @PreDestroy为例


第一种方式:直接在代码中定义

从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion);@PostConstruct和@PreDestroy。这两个注解被用来修饰一个非静态的void()方法。

被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。PreDestroy()方法在destroy()方法执行执行之后执行。


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



第二种方式在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.   
  3. </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。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值