@PostConstruct、InitializingBean、initMethod使用详解

目录

一、@PostConstruct与@PreDestroy介绍

二、spring中Constructor、@Autowired、@PostConstruct执行顺序

三、@PostConstruct、InitializingBean、initMethod执行顺序


一、@PostConstruct与@PreDestroy介绍

从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解:@PostConstruct和@PreDestroy。这两个注解被用来修饰一个非静态的void()方法,使用示例如下:

@PostConstruct
public void someMethod1(){} 

@PreDestroy
public void someMethod2(){}

被@PostConstruct修饰的方法,会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。@PostConstruct在构造函数执行之后、init()方法执行之前执行。@PreDestroy在destroy()方法执行之后执行。

二、spring中Constructor、@Autowired、@PostConstruct执行顺序

如果要将对象p注入到对象a,那么首先就必须得生成对象p和对象a,然后才能执行注入。所以,如果一个类A中有个成员变量p被@Autowried注解,那么@Autowired注入是发生在A的构造方法执行完成之后的。

如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于“依赖注入对象”,那么这无法在构造函数中实现。但是,可以使用@PostConstruct注解一个方法来完成初始化操作,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

spring中Constructor、@Autowired、@PostConstruct执行顺序为:

Constructor >> @Autowired >> @PostConstruct

使用示例如下:

扫描二维码关注公众号,回复: 14207515 查看本文章
public Class AAA {     
    @Autowired    
    private BBB b;     
    public AAA() {        
        System.out.println("构造方法,此时b还未被注入: b = " + b);    
    }    
 
    @PostConstruct    
    private void init() {        
        System.out.println("@PostConstruct将在依赖注入完成后被自动调用: b = " + b);    
    } 
}

三、@PostConstruct、InitializingBean、initMethod执行顺序

initMethod和InitializingBean是spring提供的两种对类的属性进行装配的方式。initMethod和InitializingBean指定方法的执行顺序在普通属性装配之后,initMethod指定的方法又在InitializingBean指定的方法之后执行。

 @PostConstruct、InitializingBean、initMethod执行顺序如下:

Construction > 对象属性set() 方法-> @PostConstruct -> InitializingBean -> initMethod

参考资料:

【bean的生命周期】详解InitializingBean、initMethod和@PostConstruct_nrsc-CSDN博客_bean init

猜你喜欢

转载自blog.csdn.net/chinawangfei/article/details/122825129