@PostConstruct 和 @PreDestroy 使用

1.简介

@PostConstruct: Java 自带的注解,在方法上使用该注解,会在项目启动的时候执行被修饰的方法。

@PreDestroy: Java 自带的注解,在方法上使用该注解,会在项目停止的时候执行被修饰的方法。

Java EE5 开始,@PostConstruct 和 @PreDestroy 被增加用来影响 Servlet 的生命周期,这两个注解用来修饰一个非静态的 void() 方法。

2.使用

用法1:

@PostConstruct
public void someMethod(){
    
    }

用法2:

public @PostConstruct void someMethod(){
    
    }

3.注意事项

  1. 注解修饰的方法,不能有入参。
    否则抛出异常:Lifecycle method annotation requires a no-arg method
  2. 注解所在类必须保证会注入,一般用@Component注解修饰,否则不生效。
  3. 注解修饰的方法,返回值是 void。
    只是建议,实际上是可以有返回值,springboot启动没有报错,但@PostConstruct 一般仅用于初始化bean、预加载常规数据用,所以一般不需要返回值。

4.执行顺序

  • 从依赖注入(DI)的概念我们知道,要将一个对象注入到另一个对象中,那么首先必须得生成这两个对象的实例。所以,当类 a 中有一个对象 p 的成员变量被 @Autowired 注解修饰,那么 @Autowired 注入对象 p 是在对象 a 的构造方法执行完毕之后进行的。
  • 如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。此时可以使用 @PostConstruct 注解修饰一个方法来完成初始化,@PostConstruct 注解会让方法在依赖注入完成后被自动调用。

5.测试

AnnotationTest.java

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * <p> @Title AnnotationTest
 * <p> @Description Bean记载测试类
 *
 * @author ACGkaka
 * @date 2023/1/5 10:45
 */
@Slf4j
@Component
public class AnnotationTest implements InitializingBean, DisposableBean {
    
    

    @PostConstruct
    public void postConstruct() {
    
    
        log.info("PPPPPostConstruct........");
    }

    @PreDestroy
    public void preDestroy() throws InterruptedException {
    
    
        log.info("PPPPPreDestroy.......");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
    
    
        log.info("IIIIIInitializingBean........");
    }

    @Override
    public void destroy() throws Exception {
    
    
        log.info("DDDDDisposable.......");
    }
}

6.测试结果

项目启动日志:

在这里插入图片描述

项目停止日志:

在这里插入图片描述

测试结果证实如下顺序:

  • @PostConstruct -> InitializingBean
  • @PreDestroy -> DisposableBean

整理完毕,完结撒花~





参考地址:

1.@PostConstruct详解,https://blog.csdn.net/sunayn/article/details/92840439

2.java:@PostConstruct注解使用,https://blog.csdn.net/a232884c/article/details/122683275

猜你喜欢

转载自blog.csdn.net/qq_33204709/article/details/128559569