Java开发之@PostConstruct和@PreDestroy注解

从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreDestroy。这两个注解被用来修饰一个非静态的void()方法.而且这个方法不能有抛出异常声明。

使用方式,例如:

1 @PostConstruct                                 //方式1
2 public void someMethod(){
3     ...
4 }
5
6 public @PostConstruct void someMethod(){        //方式2
7     ...
8 }

[email protected]说明

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

[email protected]说明

被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。(详见下面的程序实践)

3.程序实践

web.xml

1 <!-- @PostConstruct和@PreDestroy注解 -->
2 <servlet>
3     <servlet-name>AnnotationServlet</servlet-name>
4     <servlet-class>com.servlet.AnnotationServlet</servlet-class>
5 </servlet>
6 <servlet-mapping>
7     <servlet-name>AnnotationServlet</servlet-name>
8     <url-pattern>/servlet/AnnotationServlet</url-pattern>
9 </servlet-mapping>


 1 package com.servlet;
 2
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import java.sql.Time;
 6 import java.text.SimpleDateFormat;
 7 import java.util.Date;
 8
 9 import javax.annotation.PostConstruct;
10 import javax.annotation.PreDestroy;
11 import javax.servlet.ServletException;
12 import javax.servlet.http.HttpServlet;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15
16 public class AnnotationServlet extends HttpServlet {
17     SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss.SSS");//设置日期格式,精确到毫秒
18
19     public AnnotationServlet(){
20         System.out.println("时间:"+df.format(new Date())+"执行构造函数...");
21     }
22
23     public void destroy() {
24         this.log("时间:"+df.format(new Date())+"执行destroy()方法...");
25         //super.destroy(); // Just puts "destroy" string in log
26         // Put your code here
27     }
28
29     @PostConstruct
30     public void someMethod(){
31         //this.log("执行@PostConstruct修饰的someMethod()方法...");//注意:这样会出错
32         System.out.println("时间:"+df.format(new Date())+"执行@PostConstruct修饰的someMethod()方法...");
33     }
34
35     @PreDestroy
36     public void otherMethod(){
37         System.out.println("时间:"+df.format(new Date())+"执行@PreDestroy修饰的otherMethod()方法...");
38     }
39
40     public void doGet(HttpServletRequest request, HttpServletResponse response)
41             throws ServletException, IOException {
42         this.log("时间:"+df.format(new Date())+"执行doGet()方法...");
43     }
44
45     public void init() throws ServletException {
46         // Put your code here
47         this.log("时间:"+df.format(new Date())+"执行init()方法...");
48     }
49
50     protected void service(HttpServletRequest request, HttpServletResponse response)
51                throws ServletException, IOException{
52         this.log("时间:"+df.format(new Date())+"执行service()方法...");
53         super.service(request, response);
54     }
55
56 }

运行结果:

4.注意事项

注解多少会影响服务器的启动速度。服务器在启动的时候,会遍历Web应用的WEB-INF/classes下的所有class文件与WEB-INF/lib下的所有jar文件,以检查哪些类使用了注解。如果程序中没有使用任何注解,可以在web.xml中设置<web-app>的metadatacomplete属性为true来关掉服务器启动时的例行检查。

  支持注解的服务器需要支持到Servlet2.5及以上规范,所以Tomcat要6.0.X及以上版本才行。

时间: 2024-08-10 17:21:21

Java开发之@PostConstruct和@PreDestroy注解的相关文章

Java开发之@PostConstruct和@PreConstruct注解

从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct.这两个注解被用来修饰一个非静态的void()方法.而且这个方法不能有抛出异常声明. 使用方式,例如: 1 @PostConstruct //方式1 2 public void someMethod(){ 3 ... 4 } 5 6 public @PostConstruct void someMethod(){ //方式2 7 .

Spring学习(11)---JSR-250标准注解之 @Resource、@PostConstruct、@PreDestroy

1)@Resource(JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解) Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分别

好记性不如烂笔头91-spring3学习(12)-bean的PostConstruct和PreDestroy

Spring从2.5开始支持@PostConstruct和@PreDestroy注解.他们的功能相当于init-method和destroy-method,但是在一个Bean中,可以定义多个@PostConstruct和@PreDestroy. 就我个人的观点来说,我是不希望我的团队在代码中大量使用这些方法.这些方法,总是让人感觉代码是在以跳跃的方式进行运作,而不是基于常规的逻辑. 漏洞和一些预料之外的方法,总是出现在这样的配置之中-. 使用多个PostConstruct和PreDestroy的

注解@PostConstruct与@PreDestroy讲解及实例

从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion):@PostConstruct和@PreDestroy.这两个注解被用来修饰一个非静态的void()方法.写法有如下两种方式: @PostConstruct Public void someMethod() {} 或者 public @PostConstruct void someMethod(){} 被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被

Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的配置文件详解

原创整理不易,转载请注明出处:Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的配置文件详解 代码下载地址:http://www.zuidaima.com/share/1772661373422592.htm 本文介绍了使用Spring注解注入属性的方法.使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifi

Spring注解@PostConstruct与@PreDestroy

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

Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的

本文介绍了使用spring注解注入属性的方法. 使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@PostConstruct,@PreDestroy等注解来实现. 使用注解以前我们是怎样注入属性的 类的实现: 1. public class UserManagerImpl implements UserManager { 2. private UserDao userDao; 3. public v

Spring中Bean初始化及销毁方法(InitializingBean接口、DisposableBean接口、@PostConstruct注解、@PreDestroy注解、以及init-method方法和destroy-method方法)

一. 在Spring中Bean的初始化后以及销毁前的回调方式有: init-method:是指创建bean时调用的方法,注意,不是创建bean的方法. destroy-method:是指销毁bean时调用的方法,同样,不是销毁bean的方法. @PostConstruct注解:在bean实例化和注入后,进行初始化 @PreDestroy:在bean销毁前回调 InitializingBean接口: 查看InitializingBean接口的源码可以发现,只有一个方法,需要pojo继承Initia

java开发网易电话面试 一面总结

晚上八点多自己在看视频的时候突然接到杭州来的一个电话,当时觉得很奇怪,突兀,接通之后被告知是杭州网易打来的,没有简单的自我介绍,没有多余的废话,直接入主题,吓得我心里怪紧张的,完全没有准备,但是也没有办法,还是得硬上! 1.项目结构. 没有缓和的时间,面试官直接问我简历上某个项目的情况,简要的说了下算是缓解心情,问了下使用的相关的技术,比如用了spring mvc框架没 数据库是用的什么 这些可能就是面试官给的缓和时间吧,但是,我是这样越缓和越紧张了,悲催... 2.用过mybatis没?因为没