springboot框架启动流程三(bean生命周期)

191 阅读2分钟

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.生命周期流程

image.png

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指定配置方法。