众所周知,Servlet的生命周期:
- 通过init()方法进行初始化。
- 通过service()方法进行处理客户端请求。
- 通过destroy()方法进行销毁。
从JavaEE5开始,出现了两个影响Servlet的生命周期的注解:
- @PostConstruct
- @PreDestroy
这两个注解可用于修饰两个非静态的void方法,而且这个方法不能抛出异常声明。
注意:这两个注解需要服务器支持Servlet2.5或以上规范,所以Tomcat要6.0.X及以上版本才行。
因此Servlet的生命周期又变成了以下这种情况:
- @PostConstruct修饰的方法。
- 通过init()方法进行初始化。
- 通过service()方法进行处理客户端请求。
- 通过destroy()方法进行销毁。
- @PreDestroy修饰的方法。
注意:在Servlet中,@PostConstruct修饰的方法、init()方法、destroy()方法、@PreDestroy修饰的方法都只会执行一次,而service()每次请求来都会被调用。
在一些IOC容器(例如:Spring、CDI、Guice等)中,@PostConstruct、@PreDestroy注解用于初始化和销毁一个对象,不单单只针对Servlet。