@PostConstruct 和 @PreDestroy 使用
来源:互联网 发布:甲骨文软件多少钱 编辑:程序博客网 时间:2024/05/22 10:30
@PostConstruct 和 @PreDestroy
Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,您既可以通过实现 InitializingBean/DisposableBean 接口来定制初始化之后 / 销毁之前的操作方法,也可以通过 <bean> 元素的 init-method/destroy-method 属性指定初始化之后 / 销毁之前调用的操作方法。关于 Spring 的生命周期,《精通 Spring 2.x—企业应用开发精解》第 3 章进行了详细的描述,有兴趣的读者可以查阅。
JSR-250 为初始化之后/销毁之前方法的指定定义了两个注释类,分别是 @PostConstruct 和 @PreDestroy,这两个注释只能应用于方法上。标注了 @PostConstruct 注释的方法将在类实例化后调用,而标注了 @PreDestroy 的方法将在类销毁之前调用。
清单 17. 使用 @PostConstruct 和 @PreDestroy 注释的 Boss.java
package com.baobaotao;
import javax.annotation.Resource;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class Boss {
@Resource
private Car car;
@Resource(name = "office")
private Office office;
@PostConstruct
public void postConstruct1(){
System.out.println("postConstruct1");
}
@PreDestroy
public void preDestroy1(){
System.out.println("preDestroy1");
}
…
}
您只需要在方法前标注 @PostConstruct 或 @PreDestroy ,这些方法就会在 Bean 初始化后或销毁之前被 Spring 容器执行了。
我们知道,不管是通过实现 InitializingBean /DisposableBean 接口,还是通过 <bean> 元素的init-method/destroy-method 属性进行配置,都只能为 Bean 指定一个初始化 / 销毁的方法。但是使用@PostConstruct 和 @PreDestroy 注释却可以指定多个初始化 / 销毁方法,那些被标注 @PostConstruct 或 @PreDestroy 注释的方法都会在初始化 / 销毁时被执行。
通过以下的测试代码,您将可以看到 Bean 的初始化 / 销毁方法是如何被执行的:
清单 18. 测试类代码
package com.baobaotao;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AnnoIoCTest {
public static void main(String[] args) {
String[] locations = {"beans.xml"};
ClassPathXmlApplicationContext ctx =
new ClassPathXmlApplicationContext(locations);
Boss boss = (Boss) ctx.getBean("boss");
System.out.println(boss);
ctx.destroy();// 关闭 Spring 容器,以触发 Bean 销毁方法的执行
}
}
这时,您将看到标注了 @PostConstruct 的 postConstruct1() 方法将在 Spring 容器启动时,创建Boss Bean 的时候被触发执行,而标注了@PreDestroy 注释的 preDestroy1() 方法将在 Spring 容器关闭前销毁Boss Bean 的时候被触发执行。
- @PostConstruct 和 @PreDestroy 使用
- @PostConstruct 和 @PreDestroy 使用
- @PostConstruct 跟 @PreDestroy 使用
- @PostConstruct 和 @PreDestroy
- @PostConstruct 和 @PreDestroy
- @PostConstruct 和 @PreDestroy
- @PostConstruct和@PreDestroy
- @PostConstruct 和 @PreDestroy
- Spring @PostConstruct 和 @PreDestroy
- 8.2.4: 使用@PostConstruct和@PreDestroy定制生命周期行为
- 注解@PostConstruct与@PreDestroy的使用
- Spring Annotation(注解) @Scope ,@PostConstruct 和@PreDestroy
- Spring注解之 @PostConstruct和 @PreDestroy
- Servlet注解之@PostConstruct和@PreDestroy
- 如要使用JDK自带的@PostConstruct和@PreDestroy注解的话...
- @Scope、@PostConstruct、@PreDestroy
- 注解@PostConstruct与@PreDestroy
- 注解@PostConstruct与@PreDestroy
- memcpy实现
- 数据包路由过程
- vss密码忘记解决方案
- Android如何防止apk程序被反编译
- php5.2 的 php.ini 中文版
- @PostConstruct 和 @PreDestroy 使用
- 工业太阳光全光谱稳态模拟中采用氙灯与金属卤素灯的性能对比概要
- 说说程序员封闭开发的那些事
- PHP简单实现中文分词全文索引实例(tag专题)
- Asp.net 资源文件翻译助手
- Linux--根文件系统的挂载过程分析
- Linux设备驱动程序学习笔记
- 论TCP连接的应用层心跳包的必要性
- 设计模式入门学习 策略模式