ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Spirng里Bean就绪后“做点事“该如何选择:InitializingBean、@PostConstruct、SmartInitializingSingleton、Runner系列

Spirng里Bean就绪后“做点事“该如何选择:InitializingBean、@PostConstruct、SmartInitializingSingleton、Runner系列

1、@PostConstruct、InitializingBean

时机:当前 Bean 构造完成、自身依赖注入完成之后。作用范围仅限当前 Bean

特点:当前 Bean 注入完成,此时 Spring 容器里其他 Bean 不一定都已经创建好

适用:当前 Bean 自己内部初始化动作,不依赖其他 Bean 的 @PostConstruct 动作

说明:@PostConstruct 和 InitializingBean 二者作用几乎一致,都是【当前 Bean 自己准备好了,先干点自己的活】

小结:
(1)新项目代码推荐使用 @PostConstruct
(2)二者可以互相替代,可以把 InitializingBean 看作是 @PostConstruct 的接口版

2、SmartInitializingSingleton

时机:
【1】Spring容器中所有非懒加载单例 Bean 全部实例化、初始化完成之后,容器还没完全启动成功
【2】Spring 容器还没对外提供服务,还没触发启动成功事件

特点:待全部单例 Bean 已就绪之后,都已完成初始化,可以安全拿取容器里任意 Bean

适用:
【1】需要获取任意单例Bean,或者需要校验全部 Bean 配置是否合法
【2】预加载数据、预热数据源等,依赖多个 Bean

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进