Spring Bean的生命周期分5部分
1、实例化:根据工厂类或者构造函数实例化bean
2、属性赋值 对实例化后的属性进行赋值
3、初始化 调用init-method等方法初始化
4、使用
5、销毁 调用destroy等方法进行销毁
生命周期过程中常用的扩展点 有InstantiationAwareBeanPostProcessor、BeanPostProcessor、Aware接口等
InstantiationAwareBeanPostProcessor在实例化前后执行,实例化前执行postProcessBeforeInstantiation方法,在实例化后属性赋值之前执行postProcessAfterInstantiation。
BeanPostProcessor在初始化前后执行,在初始前执行postProcessBeforeInitialization方法,在初始后执行postProcessAfterInitialization方法
Aware分两类:
1、BeanNameAware、BeanClassLoaderAware、BeanFactoryAware在BeanPostProcessor执行postProcessBeforeInitialization方法之前执行。
2、EnvironmentAware、EmbeddedValueResolverAware、ResourceLoaderAware、ApplicationEventPublisherAware、MessageSourceAware、ApplicationContextAware等aware利用ApplicationContextAwareProcessor的postProcessBeforeInitialization方法中执行,ApplicationContextAwareProcesso是BeanPostProcessor的子类
初始阶段,如果bean是InitializingBean ,调用bean的afterPropertiesSet方法,初始化阶段会调用init-method方法
销毁阶段,注册DisposableBean,bean销毁时调用DisposableBean的destory方法,并调用配置的destory-method方法