注解@PostConstruct与@PreDestroy
2015-11-12 11:41
302 查看
从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就派上用场了。那为什么这玩意用的不多呢,这是因为如果初始化之前我们要加载或处理某些玩意完全可以在构造器初始化时就处理了,但这种方法需要自己重写构造器。好吧。直接上代码看看具体用它的时候怎么做的。
注解被用来修饰一个非静态的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; } } }
相关文章推荐
- 自制数字软盘
- 模板方法模式
- centos 6.5防火墙配置
- Membership 用的哪个 Session 或 Cookie 存储会话
- 【Quartz】配置quartz数据源的三种方式
- ch340g
- Android-->ViewPager setPageTransformer的简单理解
- bzoj1088.扫雷Mine (模拟 || DP)
- Ajax知识总结
- ora-00031:session marked for kill处理oracle中杀不掉的锁
- python开发中module模块用法实例分析
- membership 常用的操作
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- 在 Linux 中用 nmcli 命令绑定多块网卡
- 继承、实现、依赖、关联、聚合、组合的联系与区别
- linux -- framebuff驱动总结
- C#学习笔记 lambda表达式
- HDU 4946 (凸包)
- 序列化存档之备忘脚本
- win8.1 64位+oracle11g R2 64位 +powerdesigner破解版 64位+PL/SQL