栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

@PostConstruct、InitializingBean、initMethod使用详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

@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

使用示例如下:

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/731753.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号