关闭

注解@PostConstruct与@PreDestroy讲解及实例

258人阅读 评论(0) 收藏 举报
分类:

从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;
        }
    }
  
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作

关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二种是:通过 在xml中定义init-method 和  destory-me...
  • topwqp
  • topwqp
  • 2013-03-16 16:48
  • 190413

Spring中的初始化注解@PostConstruct

配置文件:     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/ao...
  • wd521521
  • wd521521
  • 2017-04-10 23:38
  • 1965

Spring管理的bean初始化方法的三种方式,以及@PostConstruct不起作用的原因

1:Spring 容器中的 Bean 是有生命周期的,spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作。下面是常用的三种指定特定操作的方法: 通过实现InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法;...
  • u010523770
  • u010523770
  • 2016-12-26 16:12
  • 3901

SpringMVC开发@Component注解类被两次实例化问题分析与解决

需要写一个Job类,思路是利用Job实例初始化的时候启动一个ScheduleExecutorTask,定时update一些东西。 @Component("RefreshJob") public class RefreshJob{ @PostConstruct public ...
  • lxb_champagne
  • lxb_champagne
  • 2013-12-27 16:45
  • 16611

黑马程序员---Java注解Annotations的详解以及使用实例

许多Api需要相当数量的样板代码。比如,为了写一个JAX-RPC网络服务。你必须提供一个成对的接口和实现,如果程序用注解装饰来表明哪个方法是远程可调用的那么这个样板代码就可以被一个工具自动生成。 其他API需要“副文件”同时被维护。例如,JavaBeans需要一个BeanInfo类来和这个Bean同...
  • ajiebcd
  • ajiebcd
  • 2015-06-24 18:00
  • 479

使用spring的@autowired注解,无法实例化dao,service,controller等

笔者在使用注解引入IOC容器中的bean对象的时候,报nullpointer的错误,查找了很多答案,有说spring配置文件application.xml中加入 标签的,有说要初始化 这个bean对象的,但是笔者尝试过了,都不起作用,终于发现是少了一个jar包struts2-spring-plug...
  • yc569484515
  • yc569484515
  • 2017-02-14 22:01
  • 4722

SSH的注解实例讲解

全注解SSH  一,hibernate annotation  Class注解:  1. @Entity:表明当前类是一个持久化类  2. @Table(name="team",catalog="NBA"):映射...
  • Erris
  • Erris
  • 2015-07-04 15:58
  • 701

[java]注解的使用1———Field

声明注解: import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @Documented public @interface DataApi { Class v...
  • yhqbsand
  • yhqbsand
  • 2014-08-15 18:53
  • 4974

ssh+注解 实例

很早之前就想写一篇关于SSH整合的博客了,但是一直觉得使用SSH的时候那么多的配置文件,严重破坏了我们代码整体性,比如你要看两个实体的关系还得对照*.hbm.xml文件,要屡清一个Action可能需要对照applicationContext*.xml和struts*.xml文件。总之过多的配置文件坏...
  • u011598529
  • u011598529
  • 2015-03-24 23:22
  • 1813

springMVC3.0注解讲解附实例

0.提示 1) Spring发行版本附带了PetClinic 示例,它是一个在简单的表单处理的上下文中, 利用了本节中说明的注解支持的Web应用程序。可以在“samples/petclinic ”目录中找到PetClinic 应用程序。   2) 另外一个建立在基于注解的Web MV...
  • nameyuxiang
  • nameyuxiang
  • 2013-10-30 09:26
  • 1141
    个人资料
    • 访问:719995次
    • 积分:1814
    • 等级:
    • 排名:千里之外
    • 原创:115篇
    • 转载:17篇
    • 译文:0篇
    • 评论:4条
    博主简介
    网易杭研院---云计算部---服务器开发
    最新评论