注解@PostConstruct与@PreDestroy讲解及实例
从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion);@PostConstruct和@PreDestroy。这两个注解被用来修饰一个非静态的void()方法。写法有如下两种方式:
@PostConstruct
Public void someMethod() {}
或者
public @PostConstruct void someMethod(){}
被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。PreDestroy()方法在destroy()方法执行执行之后执行

被注解的Servlet生命周期
需要注意的是,注解会多多少少地影响到服务器的启动速度。服务器在启动时候会遍历Web 应用的WEB-INF/classes下的所有class文件与WEB-INF/lib下的所有jar文件,以检查哪些类使用了注解。如果应用程序中没有 使用任何注解,可以在Web.xml中设置的metadata-complete属性为true.(支持@PostConstruct和 @PreDestroy的服务器需要支持Servlet2.5规范。Tomcat5.x仅支持Servlet2.4规范。)
我现在要说的是用实例说明它有什么作用。
比如说我有一种情况,在我的servlet初始化加载之前我想处理一些东西,像加载缓存等等。
怎么做?@PostConstruct就派上用场了。那为什么这玩意用的不多呢,这是因为如果初始化之前我们要加载或处理某些玩意完全可以在构造器初始化时就处理了,但这种方法需要自己重写构造器。好吧。直接上代码看看具体用它的时候怎么做的。
package com.whaty.products.whatysns.web.info; import javax.annotation.PostConstruct;
import javax.annotation.Resource; import org.springframework.stereotype.Service;
import org.springframework.util.Assert; import com.whaty.framework.cache.core.model.Cache;
import com.whaty.framework.cache.core.service.CacheService;
import com.whaty.framework.cache.entitycache.service.EntityCacheHelper;
import com.whaty.framework.cache.entitycache.service.IEntityDaoAdapter; /**
* @author bc_qi
* @param <KEY>
* @param <ENTITY>
*/
@Service("AjaxCacheableService")
public class AjaxCacheableService{ @Resource(name="cacheService")
protected CacheService cacheService; protected boolean useReadWriteEntityDao = false;
protected boolean useCache = true;
protected int entityCacheMaxSize = 1000;
protected int entityCacheMaxLiveSeconds = 3600;
protected Cache entityCache; /**
* 构造方法执行后,初始化,
*/
@PostConstruct
public void init() {
Assert.notNull(cacheService, "cacheService must be set!");
getCache();
} /**
* 获取cache
* @return
*/
protected Cache getCache() {
if (entityCache == null) {
entityCache = cacheService.addCache(this.getClass().getName(),entityCacheMaxLiveSeconds);
}
return entityCache;
} /**
* @param id
* @param useCache 是否使用Cache
* @return
*/
public Object getCache(String id) {
String strid = String.valueOf(id);
Object o = entityCache.get(strid);
return o;
} public Object putCache(int tTLSeconds,String cacheId,Object value) {
String strid = String.valueOf(cacheId);
Object o = entityCache.get(strid);
if (o != null) {
return o;
} else {
entityCache.put(strid, value, tTLSeconds);
return value;
}
} }
本文转自:http://blog.csdn.net/yaerfeng/article/details/8447530
注解@PostConstruct与@PreDestroy讲解及实例的更多相关文章
- @PostConstruct与@PreDestroy讲解及实例
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化后和销毁bean之前进行的操作 第 ...
- 注解@PostConstruct与@PreDestroy详解及实例
Java EE5 引入了@PostConstruct和@PreDestroy这两个作用于Servlet生命周期的注解,实现Bean初始化之前和销毁之前的自定义操作.此文主要说明@PostConstru ...
- 注解@PostConstruct与@PreDestroy 特性说明
简介 Java EE5 引入了@PostConstruct和@PreDestroy这两个作用于Servlet生命周期的注解,实现Bean初始化之前和销毁之前的自定义操作.此文主要说明@PostCons ...
- Spring注解@PostConstruct与@PreDestroy
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...
- servlet注解@PostConstruct与@PreDestroy
从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion):@PostConstruct和@PreDestroy.这两个注解被用来修饰一个非静态的vo ...
- 【JPA】注解@PostConstruct、@PreDestroy
从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解@PostConstruct和@PreConstruct.这两个注解被用来修饰一个非静态的void()方法,而且这个 ...
- Spring学习(11)---JSR-250标准注解之 @Resource、@PostConstruct、@PreDestroy
1)@Resource(JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解) Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定 ...
- Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的配置文件详解
本文介绍了使用Spring注解注入属性的方法.使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Pos ...
- Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的
本文介绍了使用spring注解注入属性的方法. 使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Po ...
随机推荐
- C# DatrgridView表格控件的一些用法
public class useDatrgrivView { string conn = null; string sqlComm = null; DataSet das = null; DataGr ...
- AIDL
在介绍跨程序进程间通信AIDL前,先看一下本程序activity与某个服务是怎么绑定在一起进行交互的. 需求:服务有两个方法.分别是播放音乐与停止播放音乐.该程序的活动要访问这两个方法,在activi ...
- 从DataReader中手动串行化JSON
void WriteDataReader(StringBuilder sb, IDataReader reader) { ) { sb.Append("null"); return ...
- loadrunner生成随机身份证和银行卡号
生成银行卡号码: Action() { char card[19] = {'6','2','2','7','0','0','0','0','0','0','0','0','0','0','0','0' ...
- [转载]void及void*的深度剖析
void的含义 void即"无类型",void *则为"无类型指针",可以指向任何数据类型. void指针使用规范 ①void指针可以指向任意类型的数据,亦即可 ...
- 把所有css放到一个css文件的格式
@charset "utf-8"; @import url("global.css"); @import url("common.css") ...
- poj 1651 Multiplication Puzzle (区间dp)
题目链接:http://poj.org/problem?id=1651 Description The multiplication puzzle is played with a row of ca ...
- express-16 与生产相关的问题2
处理未捕获的异常 在Node的异步世界中,未捕获的异常是特别需要关注的问题 app.get('/fail', function(req, res){ throw new Error('Nope!'); ...
- js:方法1. 数组
Array.every() array.every(f); array.every(f, o); f(array[i], i, array) [1,2,3].every(function(x) { r ...
- Python基础3- 变量与数字
1.Python变量不需要声明,其赋值操作既是变量声明和定义的过程;2.Python中每个变量在使用前都必须赋值,变量赋值后该变量才会被创建;3.Python变量是存储内存中的值,若变量赋值时内存中存 ...