java postconstruct_Java开发之@PostConstruct执行顺序

java postconstruct_Java开发之@PostConstruct执行顺序构造函数==》postConstruct==>init==destory==>predestory==卸载servlet;;从JavaEE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct。这两个注解被用来修饰一个非静态的void()方法.而且这个方法不能有抛出异常声明。使用方式,例如…

构造函数==》postConstruct==>init==destory==>predestory==卸载servlet;;

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

使用方式,例如:

67d0865f17d9be527254bf8a8ff6c5b4.gif

1 @PostConstruct //方式1

2 public void someMethod(){

3 …

4 }

5

6 public @PostConstruct void someMethod(){ //方式2

7 …

8 }

67d0865f17d9be527254bf8a8ff6c5b4.gif

1.@PostConstruct说明

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

2.@PreDestroy说明

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

3.程序实践

web.xml

67d0865f17d9be527254bf8a8ff6c5b4.gif

1

2

3 AnnotationServlet

4 com.servlet.AnnotationServlet

5

6

7 AnnotationServlet

8 /servlet/AnnotationServlet

9

67d0865f17d9be527254bf8a8ff6c5b4.gif

AnnotationServlet

67d0865f17d9be527254bf8a8ff6c5b4.gif

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 }

67d0865f17d9be527254bf8a8ff6c5b4.gif

运行结果:

d1a52559fcf3aac3872332a903f55d9c.png

4.注意事项

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

7d150b2c9feef1b752dde8e6766ea6f9.png

支持注解的服务器需要支持到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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注