原文地址:https://www.cnblogs.com/qingruihappy/p/7861623.html

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

 1 ackage com.whaty.products.whatysns.web.info;
2
3 import javax.annotation.PostConstruct;
4 import javax.annotation.Resource;
5
6 import org.springframework.stereotype.Service;
7 import org.springframework.util.Assert;
8
9 import com.whaty.framework.cache.core.model.Cache;
10 import com.whaty.framework.cache.core.service.CacheService;
11 import com.whaty.framework.cache.entitycache.service.EntityCacheHelper;
12 import com.whaty.framework.cache.entitycache.service.IEntityDaoAdapter;
13
14 /**
15 * @author bc_qi
16 * @param <KEY>
17 * @param <ENTITY>
18 */
19 @Service("AjaxCacheableService")
20 public class AjaxCacheableService{
21
22 @Resource(name="cacheService")
23 protected CacheService cacheService;
24
25 protected boolean useReadWriteEntityDao = false;
26 protected boolean useCache = true;
27 protected int entityCacheMaxSize = 1000;
28 protected int entityCacheMaxLiveSeconds = 3600;
29 protected Cache entityCache;
30
31
32 /**
33 * 构造方法执行后,初始化,
34 */
35 @PostConstruct
36 public void init() {
37 Assert.notNull(cacheService, "cacheService must be set!");
38 getCache();
39 }
40
41 /**
42 * 获取cache
43 * @return
44 */
45 protected Cache getCache() {
46 if (entityCache == null) {
47 entityCache = cacheService.addCache(this.getClass().getName(),entityCacheMaxLiveSeconds);
48 }
49 return entityCache;
50 }
51
52 /**
53 * @param id
54 * @param useCache 是否使用Cache
55 * @return
56 */
57 public Object getCache(String id) {
58 String strid = String.valueOf(id);
59 Object o = entityCache.get(strid);
60 return o;
61 }
62
63 public Object putCache(int tTLSeconds,String cacheId,Object value) {
64 String strid = String.valueOf(cacheId);
65 Object o = entityCache.get(strid);
66 if (o != null) {
67 return o;
68 } else {
69 entityCache.put(strid, value, tTLSeconds);
70 return value;
71 }
72 }
73
74 }

@postconstruct初始化的操作(转载)的更多相关文章

  1. @postconstruct初始化的操作

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

  2. SqlServer中的merge操作(转载)

    SqlServer中的merge操作(转载)   今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在technet上搜索发现别有 ...

  3. 安卓自定义View进阶-Canvas之画布操作 转载

    安卓自定义View进阶-Canvas之画布操作 转载 https://www.gcssloop.com/customview/Canvas_Convert 本来想把画布操作放到后面部分的,但是发现很多 ...

  4. C++ 初始化列表(转载)

    何谓初始化列表 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段.在 C++中,struct和class的唯一区别是 ...

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

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

  6. git一些常用的操作(转载)

    译者序:这是一篇给像我这样的新手或者是熟悉图形工具的老鸟看的.仅作为快速入门的教程. git 现在的火爆程度非同一般,它被广泛地用在大型开源项目,团队开发,以及独立开发者,甚至学生之中. 初学者非常容 ...

  7. JQuery 对 Select option 的操作---转载

    <select id="selectID" > <option value="1">1</option> <optio ...

  8. [FTP] FTPClient--FTP操作帮助类,上传下载,文件,目录操作 (转载)

    点击下载 FTPClient.zip 这个类是关于FTP客户端的操作1.构造函数 2.字段 服务器账户密码3.属性4.链接5.传输模式6.文件操作7.上传和下载8.目录操作9.内容函数看下面代码吧 / ...

  9. Mongodb基础用法及查询操作[转载]

    插入多条测试数据> for(i=1;i<=1000;i++){... db.blog.insert({"title":i,"content":&qu ...

随机推荐

  1. 日志信息log

    #include<syslog.h> //建立一个到系统日志的连接 //ident参数指向字符串,syslog()输出的每条信息都会包含这个字符串,这个参数的取值通常是程序名 //log_ ...

  2. node ->rman to RAC (迁移)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/lmocm/article/details/34435699 *.audit_file_dest='/ ...

  3. day8 大纲

    01 昨日内容回顾 文件操作 文件操作的流程: 1,打开文件创建文件句柄. 2,对文件句柄进行操作. 3,关闭文件句柄. 读, r r+ rb r+b read() 全部读取 read(n) 读取一部 ...

  4. python ord()与chr()用法以及区别

    ord()函数主要用来返回对应字符的ascii码,chr()主要用来表示ascii码对应的字符他的输入时数字,可以用十进制,也可以用十六进制. >>> ord("a&quo ...

  5. js正则表达式只能是数字、字母或下划线

    //只能是数字.字母或下划线 function isValid(str) { var reg = /^\w+$/g; return reg.test(str); }

  6. hadoop大数据基础框架技术详解

    一.什么是大数据 进入本世纪以来,尤其是2010年之后,随着互联网特别是移动互联网的发展,数据的增长呈爆炸趋势,已经很难估计全世界的电子设备中存储的数据到底有多少,描述数据系统的数据量的计量单位从MB ...

  7. Python依赖打包发布详细

    http://www.cnblogs.com/mywolrd/p/4756005.html 将Python脚本打包成可执行文件   Python是一个脚本语言,被解释器解释执行.它的发布方式: .py ...

  8. 1.linux6 x86-64 RPM包安装mysql5.7.20

    注意版本和此次更新时间 2017-12-03  版本:mysql-5.7.20-1.el6.x86_64  环境:linux6.x ​官方下载地址: wget https://dev.mysql.co ...

  9. Docker容器 暴露多个端口

    1.创建容器是指定 docker run -p <host_port1>:<container_port1> -p <host_port2>:<contain ...

  10. js中的 Table 对象

    Table 对象Table 对象代表一个 HTML 表格.在 HTML 文档中 <table> 标签每出现一次,一个 Table 对象就会被创建. Table 对象集合cells[]    ...