• Spring注解之生命周期@PostConstruct和@PreDestroy


    ****### 简介
    从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct
    这两个注解被用来修饰一个非静态的void()方法,而且这个方法不能有抛出异常声明。

    Servlet生命周期

    image

    需要注意的是,注解会多多少少地影响到服务器的启动速度。
    服务器在启动时候会遍历Web 应用的WEB-INF/classes下的所有class文件与WEB-INF/lib下的所有jar文件,以及检查哪些类使用了注解。如果应用程序中没有使用任何注解,可以在Web.xml中设置的metadata-complete属性为true.(支持@PostConstruct和 @PreDestroy的服务器需要支持Servlet2.5规范。Tomcat5.x仅支持Servlet2.4规范。)

    • @PostConstruct:在bean创建完成并且属性赋值完成之后来执行初始化方法;

    • @PreDestroy:在容器销毁bean之前执行的方法,例如一些清理工作,关流等;

    @PostContruct注解

    @PostContruct是spring框架的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。可作为一些数据的常规化加载,比如数据字典之类的。

    @PostConstruct在项目中的用处

    1、spring项目加载数据字典

    可作为一些数据的常规化加载,比如数据字典之类的。

    2、spring项目的定时任务

    spring自带的@schedule,没有开关,项目启动总会启动一个线程;
    做项目的时候就使用Java的timer,这个设置开关即可自由的控制,关闭的时候,不会启动线程;
    Java的timer也需要找到一个启动类,可以放到main函数里面启动,这样的话,代码的耦合性太高了,而使用PostConstruct是很干净的。

    @Autowired和@PostConstruct的顺序

    Constructor >> @Autowired >> @PostConstruct

    @PostConstruct特点

    1、只有一个非静态方法能使用此注解
    2、被注解的方法不得有任何参数
    3、被注解的方法返回值必须为void
    4、被注解方法不得抛出已检查异常
    5、此方法只会被执行一次

    @PostConstruct的使用

    // 方式1
    @PostConstruct
    public void someMethod() {
        // 加载数据字典
    }
    // 方式2
    public @PostConstruct void someMethod(){
        // 启动线程
    }
    

    @PreDestroy注解

    被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。

    被@PreDestroy修饰的方法会在destroy()方法之后运行在Servlet被彻底卸载之前

    @PreDestroy的使用

    @PreDestroy
    public void destroy()
    {
        // 关闭任务线程池
    }
    
  • 相关阅读:
    关于session的记录
    关于<input type="hidden"/>标签的记录
    H3C S5120V2-SI 交换机配置
    Windows 系列GVLK密钥
    给因特尔S2600CO服务器主板安装【SAS控制器】驱动
    EMQ消息队列初体验
    泰国佛历的换算问题
    linux下批量查找UTF-8的BOM文件,并去除BOM
    菲律宾Globe/TM卡最省钱的上网方案
    Windows计划任务实现MYSQL冷备份
  • 原文地址:https://www.cnblogs.com/zhaojinhui/p/16735014.html
Copyright © 2020-2023  润新知