概述:
Spring Bean的生命周期指bean从创建到销毁的整体过程。
Spring IOC中的Bean的生命周期大致分为四个阶段:实例化、属性赋值、初始化、销毁
下面我们来看一个稍微详细的过程:
实例化:实例化一个Bean对象
属性赋值:为Bean设置相关属性和依赖
初始化:初始化阶段步骤较为复杂,下面详细介绍。
销毁:执行bean销毁方法。
初始化阶段:
Spring Bean的初始化过程涉及如下几个过程:
- Aware接口属性注入
- BeanPostProcessor的before()方法回调
- InitializingBean接口的初始化方法回调
- 自定义初始化方法init回调
- BeanPostProcessor的after()方法回调
Aware接口属性注入:
Aware接口是一种框架辅助属性注入的一种思想。框架具有高度封装性,我们接触到的一般都是业务代码,一个底层功能API不能轻易的获取到,但是这不意味着永远用不到这些对象,如果用到了,就可以使用框架提供类似的Aware接口,让框架给我们注入对象。
常用的Aware接口
Aware接口 | 回调方法 | 作用 |
ServletContextAware | setServletContext(ServletContext context) | Spring框架回调方法注入ServletContext对象,web环境下才生效。 |
BeanFactoryAware | setBeanFactory(BeanFactory factory) | Spring框架回调方法注入beanFactory对象 |
BeanNameAware | setBeanName(String beanName) | Spring框架回调方法注入当前Bean在容器中的beanName |
ApplicationContextAware | setApplicationContext(ApplicationContext applicationContext) | Spring框架回调方法注入applicationContext对象 |
BeanPostProcessor:
Bean后处理器,一般在Bean实例化之后,填充到单例池singletonObjects之前执行。
有两个方法:
postProcessBeforeInitialization方法在初始化方法之前执行,postProcessAfterInitialization在初始化方法之后执行。
InitializingBean接口与init完成一些初始化方法。
bean生命周期流程图如下: