Spring 原理之 Bean生命周期
前言
在面试的时候,Bean的生命周期一般都会被问到,之前有整理过 Spring 的原理之Ioc,但是 没有对Bean的生命周期流程单独汇总说明
下面介绍一下,也更方便自己掌握。
Bean生命周期
总图:
看这个图很复杂,其实很简单,Bean的生命周期就分为以下几个步骤:(是不是real简单~)
- 实例化(Instantiation)
- 属性赋值(populate)
- 初始化(Initialization)
- 销毁(Destruction)
在 Spring DI 运行流程 这篇博客中已经分析了 创建、赋值、初始化 源码 ,具体可以去那篇博客查看,这篇主要是 说下bean生命周期的流程,方便记忆
总体流程如下:
注意几点:
- Aware 相关接口的方法在属性赋值后,BeanPostProcessor 的前置处理 前
- BeanPostProcessor 的前置处理与后置处理时是在初始化 init-method 的前后执行(在初始化bean 的前后做一些任务)
- 这个是很核心的东西,很多注解的实现都是借助 BeanPostProcessor 的前置处理与后置处理 来进行业务实现。例如 Srping 原理之@Scheduled、Spring原理之@Async
- 后置处理完之后相关回调接口,像 ContextLifecycleScheduledTaskRegistrar 中的afterSingletonsInstantiated 方法来设置 对应的定时任务
- 销毁的 destory方法