从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就派上用场了。那为什么这玩意用的不多呢,这是因为如果初始化之前我们要加载或处理某些玩意完全可以在构造器初始化时就处理了,但这种方法需要自己重写构造器。好吧。直接上代码看看具体用它的时候怎么做的。

 ackage 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;
         }
     }  

 }  

@postconstruct初始化的操作的更多相关文章

  1. @postconstruct初始化的操作(转载)

    原文地址:https://www.cnblogs.com/qingruihappy/p/7861623.html 从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注 ...

  2. java @postconstruct初始化注解使用

    1.从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion):@PostConstruct和@PreDestroy.这两个注解被用来修饰一个非静态的 ...

  3. mysql 安装成功以及第一次安装成功初始化密码操作

    一 把文件解压到一个目录下 这是解压后的目录 将my.ini文件考进去 双击打开my.ini 找到这两行更改成自己的解压路径保存 右键此电脑属性 找到高级系统设置配置环境变量 环境变量   新建 变量 ...

  4. sql初始化XML操作

    /// <summary> /// 添加记录 /// </summary> /// <param name="sender"></para ...

  5. git 初始化项目操作

    命令行指令 Git 全局设置 git config --global user.name "你的名称" git config --global user.email "a ...

  6. mysql之数据初始化update操作

    1.单表的:update user set name = (select name from user where id in (select id from user where name='小苏' ...

  7. 魔改——MDI多视图模板Tab/标签页 初始化/操作控件

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  8. 【嵌入式开发】裸机引导操作系统和ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )

    [嵌入式开发]ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )     一. 内存 ...

  9. spring框架中@PostConstruct的实现原理

    在spring项目经常遇到@PostConstruct注解,首先介绍一下它的用途: 被注解的方法,在对象加载完依赖注入后执行. 此注解是在Java EE5规范中加入的,在Servlet生命周期中有一定 ...

随机推荐

  1. CF 716E. Digit Tree [点分治]

    题意:一棵树,边上有一个个位数字,走一条路径会得到一个数字,求有多少路径得到的数字可以整除\(P\) 路径统计一般就是点分治了 \[ a*10^{deep} + b \ \equiv \pmod P\ ...

  2. POJ 1704 Georgia and Bob [阶梯Nim]

    题意: 每次可以向左移动一个棋子任意步,不能跨过棋子 很巧妙的转化,把棋子间的空隙看成石子堆 然后裸阶梯Nim #include <iostream> #include <cstdi ...

  3. BZOJ 3569: DZY Loves Chinese II [高斯消元XOR 神题]

    http://www.lydsy.com/JudgeOnline/problem.php?id=3569 题意:多次询问一个无向连通图当图中某k条边消失时这个图是否联通 强制在线 太神啦啦啦啦啦啦啦啦 ...

  4. 在控制台进行依赖注入(DI in Console)

    首先我们准备两个服务接口 public interface IServiceA { void showConsole(); int GetValue(int val); } public interf ...

  5. python爬虫(5)——正则表达式(二)

    前一篇文章,我们使用re模块来匹配了一个长的字符串其中的部分内容.下面我们接着来作匹配"1305101765@qq.com   advantage  314159265358 1892673 ...

  6. php环境搭建和第一个php程序

    一.开发环境搭建 因为是初学,使用的还是非常经典的组合appserv+dreamweaver cs6; 1.1   appserv安装 appserv的安装还是非常简单的,直接双击可执行程序appse ...

  7. 6.C++初步分析类

    面向对象的意义在于: -将日常生活中习惯的思维方式引入程序设计中 -将需求中的慨念直观的映射到解决方案中 -以模块为中心构建可复用的软件系统 -提高软件产品的可维护性和可扩展性 其中类和对象是面向对象 ...

  8. TensorFlow实战之实现自编码器过程

    关于本文说明,已同步本人另外一个博客地址位于http://blog.csdn.net/qq_37608890,详见http://blog.csdn.net/qq_37608890/article/de ...

  9. Docker Centos7 下建立 Docker 桥接网络

    为什么要让docker桥接物理网络? docker默认提供了一个隔离的内网环境,启动时会建立一个docker0的虚拟网卡,每个容器都是连接到docker0网卡上的.而docker0的ip段为172.1 ...

  10. Python 脚本实现对 Linux 服务器的监控

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 原文地址 由于原文来自微信公众号,并且脚本都是图片,所以这里 ...