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