Java开发之@PostConstruct和@PreConstruct注解

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 …

8 }
1.

2.
3.

4.
5.

6.
7.

8.
1.@PostConstruct说明

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

2.@PreConstruct说明

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

3.程序实践

web.xml

1
2
6

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 }
1.

2.
3.

4.
5.

6.
7.

8.
9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39.

40.

41.

42.

43.

44.

45.

46.

47.

48.

49.

50.

51.

52.

53.

54.

55.

56.

57.

58.

59.

60.

61.

62.

63.

64.

65.

66.

67.

68.

运行结果:

4.注意事项

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

Original: https://www.cnblogs.com/ExMan/p/16379744.html
Author: ExplorerMan
Title: Java开发之@PostConstruct和@PreConstruct注解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/538295/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 居然要周末加班才解决这个问题

    摘要 万万没想到,最近的一个任务居然在一周没有解决,弄得周六在家忙了一天,还没完成,直到周日早上灵光一闪,才完成了。坦白讲,我已经好久没有过这种体验了,被一个技术问题困扰了好几天,…

    Java 2023年6月8日
    094
  • Linux Ubuntu 下载&安装 Java

    1. 下载 Java OpenJDK VS Oracle JDK ? 下载之前查了下资料,有 OpenJDK 和 Oracle JDK 两种: Java 最早由 SUN 公司发明,…

    Java 2023年6月5日
    087
  • 多线程与高并发(五)—— 源码解析 ReentrantLock

    一、前言 ReentrantLock 是基于 AQS 实现的同步框架,关于 AQS 的源码在 这篇文章 已经讲解过,ReentrantLock 的主要实现都依赖AQS,因此在阅读本…

    Java 2023年6月9日
    079
  • Java基础

    java是什么? java是java面向对象程序设计语言和java平台的总称 java的开发平台 javaSE:标准版 javaEE:企业版 javaME:嵌入式 JRE和JDK …

    Java 2023年6月5日
    080
  • 故事篇:终于给老婆讲明白什么是logback了!

    故事会迟到,但他从不会缺席。今天的故事开始了,你准备好了吗? 前奏 简单介绍一下我的老婆:集智慧与美貌于一身的女子——阿狸,一句”我们心有灵犀,不是吗?”让…

    Java 2023年6月5日
    097
  • MySQL十九:分库分表实践

    转载~ 在很多小型应用中都没真正使用分库分表,但是说起来并不陌生,因为我们在面试中经常会被问到,今天我们从从以下几个方面来聊聊分库分表: 「是什么?解决什么?怎么做?为什么要这么做…

    Java 2023年6月8日
    079
  • MySQL 8.0安装 + 配置环境变量 + 连接 cmd

    MySQL 安装教程 搜索 MySQL,进入官网,找到 download 点击适用于 window community 版本,点击图中第二个 450.7 M 的安装包进行下载 这里…

    Java 2023年6月5日
    0141
  • BUU PWN RIP1 RET2CODE WRITEUP

    1、下载附件后,运行是一个输入程序,IDA分析main函数,gets可溢出。 F5伪代码如下: int __cdecl main(int argc, const char **ar…

    Java 2023年6月5日
    065
  • Nginx总结目录

    Original: https://www.cnblogs.com/qtiger/p/16021987.htmlAuthor: 搬砖滴Title: Nginx总结目录

    Java 2023年5月30日
    081
  • Spring:读入properties文件程序示例

    文章目录 + [项目目录结构](#-1) + [properties文件](#properties-4) + [xml文件](#xml-11) + [java文件](#java-3…

    Java 2023年5月30日
    073
  • SpringBoot自动装配初步浅理解

    Created time: May 15, 2022 6:36 PMDone: DoingLast edited time: May 25, 2022 6:13 PMTags: S…

    Java 2023年6月8日
    085
  • 交换机 和 路由器 区别

    因为路由器是基于 IP 设计的,俗称三层⽹络设备,路由器的各个端⼝都具有 MAC 地址和 IP 地址; ⽽交换机是基于以太⽹设计的,俗称⼆层⽹络设备,交换机的端⼝不具有 MAC 地…

    Java 2023年6月6日
    061
  • 求和平均统计

    单因素方差分析我大白话说就是求和平均统计,样本与平均值进行各种对比得出的结论,如下: 在试验中,把考察的指标称为试验指标,影响试验指标的条件称为因素。因素可分为两类,一类是人为可控…

    Java 2023年5月29日
    079
  • 在Win11的WSL中体验IDEA等GUI程序

    原本已经 放弃WSL很久了,这两天把Win10更新到Win11,看到WSL2已经发布,而且貌似还有很大升级还可以在 WSL中跑Linux GUI应用。在加上Win11的支持简直可以…

    Java 2023年6月16日
    085
  • Java学习 (20) Java数组篇(04)Arrays类&冒泡排序&稀疏数组

    Arrays类 语法实例 冒泡排序 语法实例 具体讲解视频(狂神说Java) 稀疏数组 语法实例 具体讲解视频(狂神说Java) Arrays类 教组的工具类java.util.A…

    Java 2023年6月8日
    0107
  • 力扣刷题之路——二维数组变换、前缀和数组

    刷题顺序参考:力扣刷题顺序 涉及题目 48. 旋转图像 73. 矩阵置零 289. 生命游戏 238. 除自身以外数组的乘积 旋转图像 自己的解题思路: 题目上说不能使用另一个矩阵…

    Java 2023年6月5日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球