注解@PostConstruct与@PreDestroy详解及实例
来源:互联网 发布:图片缩小软件 编辑:程序博客网 时间:2024/06/08 19:15
简介
Java EE5 引入了@PostConstruct和@PreDestroy这两个作用于Servlet生命周期的注解,实现Bean初始化之前和销毁之前的自定义操作。此文主要说明@PostConstruct。
1.@PostConstruct说明
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。
2.@PreConstruct说明
被@PreConstruct修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreConstruct修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。
API使用说明
以下为@PostConstruct的API使用说明:
PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法必须在将类放入服务之前调用。支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。只有一个方法可以用此注释进行注释。应用 PostConstruct 注释的方法必须遵守以下所有标准:该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象 ;该方法的返回类型必须为 void;该方法不得抛出已检查异常;应用 PostConstruct 的方法可以是 public、protected、package private 或 private;除了应用程序客户端之外,该方法不能是 static;该方法可以是 final;如果该方法抛出未检查异常,那么不得将类放入服务中,除非是能够处理异常并可从中恢复的 EJB。
总结为一下几点:
- 只有一个方法可以使用此注释进行注解;
- 被注解方法不得有任何参数;
- 被注解方法返回值为void;
- 被注解方法不得抛出已检查异常;
- 被注解方法需是非静态方法;
- 此方法只会被执行一次;
Servlet执行流程图
两个注解加入只会,Servlet执行流程图:
在具体Bean的实例化过程中,@PostConstruct注释的方法,会在构造方法之后,init方法之前进行调用。
实例
基于spring boot编写的可执行方法见github:https://github.com/HappySecondBrother/example
UserService方法(提供缓存数据):
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
BusinessService方法,通过@PostConstruct调用UserService:
- 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
- 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
执行结果:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
项目应用
在项目中@PostConstruct主要应用场景是在初始化Servlet时加载一些缓存数据等。
注意事项
注解会多多少少地影响到服务器的启动速度。服务器在启动时候会遍历Web 应用的WEB-INF/classes下的所有class文件与WEB-INF/lib下的所有jar文件,以检查哪些类使用了注解。如果应用程序中没有 使用任何注解,可以在Web.xml中设置的metadata-complete属性为true.(支持@PostConstruct和 @PreDestroy的服务器需要支持Servlet2.5规范。Tomcat5.x仅支持Servlet2.4规范。Tomcat6.0.X及以上版本支持Servlet2.5及以上规范。
- 注解@PostConstruct与@PreDestroy详解及实例
- 注解@PostConstruct与@PreDestroy详解及实例
- 注解@PostConstruct与@PreDestroy详解及实例
- 注解@PostConstruct与@PreDestroy详解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- 注解@PostConstruct与@PreDestroy讲解及实例
- WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
- C# Dictionary的按下标访问的方法
- PHP数组函数整理
- JavaWeb三大组件(Servlet、Filter、Listener)
- Python3 类包装实现多线程
- 注解@PostConstruct与@PreDestroy详解及实例
- 第三章 授权——跟我学习springmvc shiro mybatis
- Google play内购 Iab
- python2.7基于selenium的web自动化测试项目--customer
- 解决C3P0在Linux下Failed to get local InetAddress for VMID问题
- Word2vec基础介绍(四):CBOW和skip-gram模型
- 机器学习之:决策树(Decision Tree)
- 【修真院“善良”系列之十七】请拿好这支时间之箭
- 水題