@PostConstruct、@PreDestroy与Servlet生命周期

众所周知,Servlet的生命周期:

  1. 通过init()方法进行初始化。
  2. 通过service()方法进行处理客户端请求。
  3. 通过destroy()方法进行销毁。

从JavaEE5开始,出现了两个影响Servlet的生命周期的注解:

  1. @PostConstruct
  2. @PreDestroy

这两个注解可用于修饰两个非静态的void方法,而且这个方法不能抛出异常声明。

注意:这两个注解需要服务器支持Servlet2.5或以上规范,所以Tomcat要6.0.X及以上版本才行。

因此Servlet的生命周期又变成了以下这种情况:

  1. @PostConstruct修饰的方法。
  2. 通过init()方法进行初始化。
  3. 通过service()方法进行处理客户端请求。
  4. 通过destroy()方法进行销毁。
  5. @PreDestroy修饰的方法。

注意:在Servlet中,@PostConstruct修饰的方法、init()方法、destroy()方法、@PreDestroy修饰的方法都只会执行一次,而service()每次请求来都会被调用。

在一些IOC容器(例如:Spring、CDI、Guice等)中,@PostConstruct、@PreDestroy注解用于初始化和销毁一个对象,不单单只针对Servlet。

;