1.引言
关于springboot框架bean的生命周期,即是spring框架bean的生命周期,一脉相承的框架,是一个事情。对于大多数java应用开发同学来说,相对应该都比较熟悉。
另外在java岗位求职中,也是出场较高的面试问题之一,说明了它的基础性和重要性。正因为如此,作为java应用开发者,每个人都应该要知道它。我之前面试候选者的时候,基本上都会作为框架基础性问题进行一下了解。
2.bean生命周期
2.1.生命周期定义
spring或者说springboot框架中的bean生命周期,它指的是bean在从创建,到销毁的全过程。整体过程如下:
- 实例化:给bean分配内存空间,相应jvm的加载过程
- 设置属性:我们常讲的依赖注入,进行bean的注入和装配。包含set注入和构造方法注入
- 初始化:初始化过程相对复杂一些。包含:各种通知执行->初始化前置执行->初始化执行->初始化后置执行
- 应用bean:业务调用执行bean过程
- 销毁bean:Ioc容器销毁
2.2.生命周期流程
2.3.生命周期详解
2.3.1.实例化
- Ioc容器根据BeanDefinition信息,应用反射机制创建bean实例。BeanDefinition是Bean配置的描述封装,即你在xml配置文件,或者通过注解配置的bean信息进行了封装
- 关注bean作用域。如果是单例Singleton,在容器启动时创建;如果时prototype,在每次请求获取bean实例时创建
- 具体实例化方法。通过构造方法实例化,或通过工厂方法实例化
2.3.2.属性设置
- set注入,即通过调用setxx方法进行注入
- 构造方法注入,即通过构造方法进行注入
2.3.3.初始化
- 通知执行。执行一系列Aware通知接口,比如常见的BeanNameAware,比如ApplicationContextAware接口
- 初始化前置执行。即BeanPostProcessor.postProcessBeforeInitialization调用执行。用于修改Bean属性
- 初始化执行。即执行@PostConstruct标注方法,或init-method指定配置方法,或bean扩展InitializationBean接口方法afterPropertiesSet
- 初始化后置执行。即BeanPostProcessor.postProcessAfterInitialization调用执行。用于完成Bean的最终修饰
2.3.4.应用bean
- 业务调用阶段,对应业务操作执行
2.3.5.销毁
- Ioc容器销毁。触发执行@preDestroy标注方法,或destroy-methon指定配置方法。