@PostConstruct方法是否在依赖其所属Bean的实例初始化前执行完毕?
问题解答
首先给出明确结论:你担心的情况不会发生,@PostConstruct 标注的方法一定会在当前Singleton Bean初始化完成、且所有依赖该Bean的其他Bean初始化之前执行完毕,消费方注入的实例必然已经完成SSL证书加载逻辑,不会读取到null值。
Spring托管Singleton Bean的初始化执行顺序如下:
- 第一步:Spring调用Bean的构造方法完成实例创建
- 第二步:完成该Bean自身所有依赖的注入(包括它依赖的其他Bean、
@Value注入的配置属性等) - 第三步:执行
@PostConstruct标注的初始化方法:你的证书加载、成员变量赋值逻辑会在这一步完整执行完成,方法返回后Spring才会将该Bean标记为就绪状态 - 第四步:Spring才会开始初始化所有依赖该Bean的其他Bean,将就绪状态的实例注入到消费方中
补充注意:只有Spring托管的Bean才会触发
@PostConstruct逻辑,如果你手动new该Bean的实例,注解不会生效。如果同时配置了多种初始化逻辑,执行优先级为:@PostConstruct> InitializingBean接口的afterPropertiesSet方法 > 自定义init-method,所有初始化逻辑都会在Bean对外提供前执行完成。
内容的提问来源于stack exchange,提问作者Vitalii
相关产品推荐
相关产品推荐

