zoukankan      html  css  js  c++  java
  • @PostConstruct与@PreDestroy讲解及实例

    关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种:
    第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化后和销毁bean之前进行的操作
    第二种是:通过 在xml中定义init-method 和  destory-method方法
    第三种是: 通过bean实现InitializingBean和 DisposableBean接口
     
    此处介绍第一种方法:
     
    从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就派上用场了。那为什么这玩意用的不多呢,这是因为如果初始化之前我们要加载或处理某些玩意完全可以在构造器初始化时就处理了,但这种方法需要自己重写构造器。
    用法如下:
    @Service("AjaxCacheableService")
    public class AjaxCacheableService{
     
    @Resource(name="cacheService")
    protected CacheService cacheService;
     
    protected int entityCacheMaxSize = 1000;
    protected int entityCacheMaxLiveSeconds = 3600;
    protected Cache entityCache;
     
    /**
    * 构造方法执行后,初始化,
    */
    @PostConstruct
    public void init() {
    Assert.notNull(cacheService, "cacheService must be set!");
    getCache();
    }
    
    }
     
     
  • 相关阅读:
    一个不错的学习Hadoop和MapReduce的个人博客
    开源数据库sharding
    《控制论》导读 及 译者序 第二版序 读书笔记
    异常处理反模式
    主数据处理链碰到空数据节点不在继续执行的问题解决方案
    SAP 学习笔记 FI000 公司代码
    SAP概念之Client(集团),业务范围(business area),公司(company),公司代码(company code)
    零售行业主数据增量上载
    R/3数据源抽数到BWPSA中字段信息丢失
    BI CONTENT激活出现DUMP
  • 原文地址:https://www.cnblogs.com/leskang/p/6410718.html
Copyright © 2011-2022 走看看