从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. UOJ#219. 【NOI2016】优秀的拆分 [后缀数组 ST表]

    #219. [NOI2016]优秀的拆分 题意:求有多少AABB样子的子串,拆分不同的同一个子串算多个 一开始一直想直接求,并不方便 然后看了一眼Claris的题解的第一行就有思路了 如果分开,求\( ...

  2. linux指令札记

    1.有关文件压缩解压缩:Linux下自带了一个unzip的程序可以解压缩文件,解压命令是:unzip filename.zip 同样也提供了一个zip程序压缩zip文件,命令是 zip filenam ...

  3. ionic2+Angular 依赖注入之Subject ——使用Subject来实现组件之间的通信

    在Angular+ionic2 开发过程中,我们不难发现,页面之间跳转之后返回时是不会刷新数据的. 场景一:当前页面需要登录之后才能获取数据--去登录,登录成功之后返回--页面需要手动刷新才能获取到数 ...

  4. Docker MySQL备份

    建立备份的MySQL容器 docker run --name mysql-back -e MYSQL_ROOT_PASSWORD=root -v /srv/mysql/backup:/mysql/ba ...

  5. [ZJOI2008]骑士

    [ZJOI2008]骑士 标签: DP 题目链接 题解 把边看成无向的. 其实就是求这个东西的最大独立集. 但是这不是树,怎么求呢? 其实还是一样的求法. 对于每一个连通块.最多有这个联通块的大小数目 ...

  6. 我的2017年终总结(PF项目框架设计心得分享 1.0rc new)

    一晃眼又过去了一年,在这一年里尽管有许多不如意的事,却阻挡不了我前进的脚步.先用一句话来总结去年一年的状态,那就是“无休无止的忙碌”.而这样的忙碌状态对我来说是不可取的,因为匮乏的忙碌只能让头脑处于一 ...

  7. centos/linux下的安装vsftpd

    1.简介: vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点.vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,ftp服务器软件 2.安 ...

  8. Maven中模块的聚合以及对jar包的继承

    我需要将之前的A B C三个模块聚合到一个一个工程中ABC项目中 pom.xml文件中应该这样配置 1.修改packaging里面的配置 <!-- 用于聚合这个项目的时候应该将packaging ...

  9. iterator的romove方法的注意事项

    package cn.lonecloud.Iterator; import java.util.ArrayList; import java.util.Iterator; public class m ...

  10. Netbeans简要配置许可证信息

    <#if licenseFirst??>${licenseFirst}</#if>${licensePrefix}Copyright (C) <2017>  < ...