Spring注解之生命周期@PostConstruct和@PreDestroy
****### 简介
从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct。
这两个注解被用来修饰一个非静态的void()方法,而且这个方法不能有抛出异常声明。
Servlet生命周期
需要注意的是,注解会多多少少地影响到服务器的启动速度。
服务器在启动时候会遍历Web 应用的WEB-INF/classes下的所有class文件与WEB-INF/lib下的所有jar文件,以及检查哪些类使用了注解。如果应用程序中没有使用任何注解,可以在Web.xml中设置的metadata-complete属性为true.(支持@PostConstruct和 @PreDestroy的服务器需要支持Servlet2.5规范。Tomcat5.x仅支持Servlet2.4规范。)
-
@PostConstruct:在bean创建完成并且属性赋值完成之后来执行初始化方法;
-
@PreDestroy:在容器销毁bean之前执行的方法,例如一些清理工作,关流等;
@PostContruct注解
@PostContruct是spring框架的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。可作为一些数据的常规化加载,比如数据字典之类的。
@PostConstruct在项目中的用处
1、spring项目加载数据字典
可作为一些数据的常规化加载,比如数据字典之类的。
2、spring项目的定时任务
spring自带的@schedule,没有开关,项目启动总会启动一个线程;
做项目的时候就使用Java的timer,这个设置开关即可自由的控制,关闭的时候,不会启动线程;
Java的timer也需要找到一个启动类,可以放到main函数里面启动,这样的话,代码的耦合性太高了,而使用PostConstruct是很干净的。
@Autowired和@PostConstruct的顺序
Constructor >> @Autowired >> @PostConstruct
@PostConstruct特点
1、只有一个非静态方法能使用此注解
2、被注解的方法不得有任何参数
3、被注解的方法返回值必须为void
4、被注解方法不得抛出已检查异常
5、此方法只会被执行一次
@PostConstruct的使用
// 方式1
@PostConstruct
public void someMethod() {
// 加载数据字典
}
// 方式2
public @PostConstruct void someMethod(){
// 启动线程
}
@PreDestroy注解
被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。
被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。
@PreDestroy的使用
@PreDestroy
public void destroy()
{
// 关闭任务线程池
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步