zoukankan      html  css  js  c++  java
  • 注解@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

  • 相关阅读:
    iOS cannot find folder xcdatamodeld Xcode 7
    ios swift generator 文章推荐
    ios swift 2 新的OptionSetType使用方法
    Maven 教程(11)— Maven远程仓库的各种配置
    Maven 教程(10)— Maven依赖详解
    Maven 教程(9)— Maven坐标详解
    Maven设置MAVEN_OPTS环境变量
    Maven 教程(7)— Maven使用的最佳实践
    Maven 教程(6)— Maven之pom.xml文件简单说明
    Maven 教程(5)— Maven目录结构及常用命令说明
  • 原文地址:https://www.cnblogs.com/dreammyle/p/5416839.html
Copyright © 2011-2022 走看看