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

简介

在Java EE5中就 引入了@PostConstruct和@PreDestroy这两个作用于Servlet生命周期的注解,实现Bean初始化之前和销毁之前的自定义操作。

@PostConstruct的API使用说明:

PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法必须在将类放入服务之前调用。支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。只有一个方法可以用此注释进行注释。应用 PostConstruct 注释的方法必须遵守以下所有标准:该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象 ;该方法的返回类型必须为 void;该方法不得抛出已检查异常;应用 PostConstruct 的方法可以是 publicprotectedpackage privateprivate;除了应用程序客户端之外,该方法不能是 static;该方法可以是 final;如果该方法抛出未检查异常,那么不得将类放入服务中,除非是能够处理异常并可从中恢复的 EJB。

总结为一下几点:

  • 只有一个方法可以使用此注释进行注解
  • 被注解方法不得有任何参数;
  • 被注解方法返回值为void;
  • 被注解方法不得抛出已检查异常;
  • 被注解方法需是非静态方法;
  • 此方法只会被执行一次;

Servlet执行流程图

这里写图片描述

注意:在具体Bean的实例化过程中,@PostConstruct注释的方法,会在构造方法之后,init方法之前进行调用。

使用方法:

package com.pkk.ehcache.service;

import javax.annotation.PostConstruct;

import org.springframework.stereotype.Service;

import com.pkk.ehcache.util.common.GetCache;

import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;

/**
 * @author kunzai
 * @version V1.0
 * @Title: frames
 * @Package com.pkk.ehcache.service
 * @Description: <>
 * @date 2018/4/3 16:33
 */
@Service
public class CacheService {


    @PostConstruct
    public void initUserCache() {
        System.out.println("开始初始化");
        Cache cache = GetCache.getUserCacheInstance();
        System.out.println("获取之后的缓存时:" + cache);

        //额外添加缓存[并且持久化这个数据]
        Element element = new Element("额外数据key", "额外数据value", true);
        cache.put(element);

        System.out.println("加载缓存名称为:" + cache.getName());
        System.out.println("加载缓存标识为:" + cache.getGuid());
        System.out.println("加载缓存配置为:" + cache.getCacheConfiguration());
        System.out.println("加载缓存数量为:" + cache.getSize());
    }

}

注意要点:
1:不要忽略ssm本身对注解是通过扫包才让注解有效的
2:注意扫包区间,出了这个范围@PostConstruct是无效的。应用在启动时是不会走带有这个注解的方法的。
3:@PostCoustruct注解用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法所在的类必须放入服务之前调用。也就是该注解的类上不能随便注解:经验总结是能用@Service注 解,不能用@Controller注解,否则启动不会走这个方法。这个类定位为服务层/业务层。而不是控制层(web层)

<!-- 自动扫描该包,支持注解的层限制。另外多个包中间用逗号或者分号隔开都可以。 -->
<context:component-scan base-package="com.**.service,com.**.action,com.**.common" >
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值