• 注解@PostConstruct与@PreDestroy 特性说明


    简介

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

    API使用说明

    以下为@PostConstruct的API使用说明:

    PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。

    此方法必须在将类放入服务之前调用。

    支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。

    只有一个方法可以用此注释进行注释。

    应用 PostConstruct 注释的方法必须遵守以下所有标准:

    1、该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象 ;

    2、该方法的返回类型必须为 void;该方法不得抛出已检查异常;

    3、应用 PostConstruct 的方法可以是 public、protected、package private 或 private;

    4、除了应用程序客户端之外,该方法不能是 static;

    5、该方法可以是 final;

    6、如果该方法抛出未检查异常,那么不得将类放入服务中,除非是能够处理异常并可从中恢复的 EJB。

    总结为一下几点:

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

    Servlet执行流程图

    两个注解加入只会,Servlet执行流程图: 
    这里写图片描述

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

    实例

    基于Spring boot编写的可执行方法见github:https://github.com/HappySecondBrother/example 

    BusinessService方法,通过@PostConstruct调用UserService:

    package com.secbro.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.PostConstruct;
    import java.util.List;
    
    /**
     * @author 二师兄
     * @date 2016/8/10
     */
    @Service
    public class BusinessService {
        /**
         * 构造方法执行之后,调用此方法
         */
        @PostConstruct
        public void init(){
            System.out.println("@PostConstruct方法被调用");
        }
    
        public BusinessService(){
            System.out.println("构造方法被调用");
        }
    }
    

    执行结果:

    构造方法被调用
    @PostConstruct方法被调用

    项目应用

    在项目中@PostConstruct主要应用场景是在初始化Servlet时加载一些缓存数据等。

    注意事项

    使用此注解时会影响到服务的启动时间。服务器在启动时会扫描WEB-INF/classes的所有文件和WEB-INF/lib下的所有jar包。

  • 相关阅读:
    开博的缘由
    听了一节公开课 课后感
    python中的函数、变量和递归函数
    迭代器和生成器
    字符串的格式化
    html和htm的区别
    基本数据类型总结
    数据类型-----集合
    基础测试题(字符串、列表、元组、字典)
    基本数据类型-----字典(Dictionary)
  • 原文地址:https://www.cnblogs.com/chenjfblog/p/8431810.html
Copyright © 2020-2023  润新知