构造函数==》postConstruct==>init==destory==>predestory==卸载servlet;;
从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 …
8 }
1.@PostConstruct说明
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。
2.@PreDestroy说明
被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。(详见下面的程序实践)
3.程序实践
web.xml
1
2
3 AnnotationServlet
4 com.servlet.AnnotationServlet
5
6
7 AnnotationServlet
8 /servlet/AnnotationServlet
9
AnnotationServlet
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中设置的metadatacomplete属性为true来关掉服务器启动时的例行检查。
支持注解的服务器需要支持到Servlet2.5及以上规范,所以Tomcat要6.0.X及以上版本才行。
Java Object 构造方法的执行顺序
Java Object 构造方法的执行顺序 @author ixenos 为了使用类而做的准备工作包括三个步骤 1)加载:类加载器查找字节码(一般在classpath中找),从字节码创建一个Class …
夯实Java基础系列7:一文读懂Java 代码块和执行顺序
目录 Java中的构造方法 构造方法简介 构造方法实例 例 1 例 2 Java中的几种构造方法详解 普通构造方法 默认构造方法 重载构造方法 java子类构造方法调用父类构造方法 Java中的代码块 …
夯实Java基础系列7:Java 代码块和执行顺序
本系列文章将整理到我在GitHub上的仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 …
(转)java for循环的执行顺序和几种常用写法
算是温习吧.问题比较基础,但是也比较重要.(虽然是C,但是很经典) for循环可以说在每个程序中都少不了的,语句头包括三个部分:初始化,判读条件,一个表达式. 但是这三个部分的执行顺序是什么,这是我们 …
Java多线程之控制执行顺序
概念: 多线程在并发环境中的正常执行顺序是随机无序的,并不能按照期盼的结果输出. 因为启动一个线程时,线程并不会立即执行,而是等待CPU的资源调度,CPU能调度哪个线程,是通过多种复杂的算法计算而来. …
java中静态代码执行顺序
1.Java中静态变量只能在类主体中定义,不能在方法中定义. 静态变量属于类所有而不属于方法. 2. 静态块:用static申明,JVM加载类时执行,仅执行一次 构造块:类中直接用{}定义,每一次创建 …
nginx开发_Filter模块执行顺序
Filter模块执行顺序 Filter模块的执行顺序是在执行configure文件时决定的,configure文件执行完成后生成objs/ngx_modules.c,文件中定义了一个数组ngx_mod …
Java初始化块及执行顺序
理解 初始化块又称为代码块.属于类中的第四大成员.本质上是一个方法,它也有方法体,但没有方法名,没有参数,没有返回,而且也不是通过对象或类名显式调用,而是通过隐式调用 是构造器的补充 语法 [修饰符] …
Spring InitializingBean init-method @PostConstruct 执行顺序
Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下三种: 通过实现 Initializing …
随机推荐
IONIC 开发的Android应用程序签名(或重新签名)详解
完全通过DOS命令来完成apk签名 给apk签名一共要用到3个工具,或者说3个命令,分别是:keytool.jarsigner和zipalign,下面是对这3个工具的简单介绍: …
java io系列16之 PrintStream(打印输出流)详解
本章介绍PrintStream以及 它与DataOutputStream的区别.我们先对PrintStream有个大致认识,然后再深入学习它的源码,最后通过示例加深对它的了解. 转载请注明出处:htt …
查看现有运行的linux服务器有多少内存条
i161 admin # ssh 192.168.5.209 dmidecode | grep ‘Ending Address’ -B1 -A2 Starting Address: 0x0000 …
CodeForces 471C MUH and House of Cards
MUH and House of Cards Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & % …
struts2 package元素配置
package 元素的所有属性及对应功能: Attribute Required Description name yes key to for other packages to reference …
js中一些注意点 ps不断更新中....
nextSibling 和 nextElementSibling 的区别 (previousSibling 和 previousElementSibling ) nextSibling 在IE8及以下 …
重拾C++第一天_WDS
1.面向对象编程的三大特点:封装.继承.多态 2.C++中若不指定类中成员的访问权限默认就是private的(class默认是private的,struct默认是public的). 3.C++规范中类 …
SOA解决方案Dubbo学习入门
1.面向服务架构SOA简介 SOA:Service Oriented Architecture 也即现在常被提及的面向服务编程架构,其相对于传统的垂直架构来说是一种比较新的架构.
linux的桌面介绍
一:linux桌面环境 1. X Windows桌面环境 X Windows软件是图形显示的核心部分,是直接和PC上的显卡及显示器打交道的底层程序,它控制着linux程序如何在电脑上显示出漂亮的窗口和 …
JAVA基础之——序列化和反序列化
1 概念 序列化,将java对象转换成字节序列的过程. 反序列化,将字节序列恢复成java对象的过程. 2 为什么要序列化? 2.1 实现数据持久化,当对象创建后,它就会一直在,但是在程序终止时,这个 …
今天的文章java postconstruct_Java开发之@PostConstruct执行顺序分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/9009.html