文章目录
- 一、图解
- 二、文字解析
- 总结
一、图解
>注:处于同一行的执行顺序是从左往右
二、文字解析
SpringBean的生命周期总体分为四个阶段:实例化=>属性注入=>初始化=>销毁
- Step1 ==实例化Bean:==根据配置文件中Bean的定义,利用JavaReflection反射技术创建Bean的实例(还是一个半成品)
- Step2 注入对象依赖的属性值(对象)
- Step3 处理各种Aware接口: Spring会检测该Bean是否实现了xxxAware接口,通过此类型的接口,可以让Spring框架为当前Bean注入相应的内容。
- 如果实现BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,注入Bean的名字
- 如果实现BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,注入的是Spring工厂
- 如果实现的是ApplicationContextAware接口,会调用setApplicationContext()方法,注入Spring上下文
- Step4 执行BeanPostProcessor前置处理: 如果想对Bean进行一些自定义的前置处理,那么可以让Bean实现BeanPostProcessor接口,将会在该阶段调用postProcessBeforeInitialization(Object obj,String s)方法
- Step5 执行InitializingBean初始化方法: 如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法
- Step6 执行init-method自定义初始化方法: 如果Bean在Spring配置文件中配置了init-method属性,则会自动调用其配置的初始化方法
- Step7 执行BeanPostProcessor后置处理: 如果这个Bean实现BeanPostProcessor接口,将会在该阶段调用**postProcessAfterInitialization(Object obj,String s)**方法
- 以上步骤完成之后,Bean已经被真正创建,可以正常使用了
- Step8 执行DisposableBean销毁Bean: 当Bean不再需要时,会经过清理阶段,如果实现了DisposableBean接口,则会调用destroy()方法执行销毁
- Step9 执行destroy-method自定义销毁方法: 如果Bean在Spring配置文件中配置了destroy-method属性,则会自动调用其配置的销毁方法
总结
- 首先是实例化、属性赋值、初始化、销毁这 4 个大阶段;
- 再是初始化的具体操作,有 Aware 接口的依赖注入、BeanPostProcessor 在初始化前后的前后置处理以及 InitializingBean 和 配置类加载的init-method 的初始化操作;
- 实现 DisposableBean 接口调用destory()方法销毁以及配置类加载的destory-method销毁方法