BeanFactory中Bean生命周期的完整过程
具体过程如下:
(1)getBean(beanName),如果容器注册了InstantiationAwareBeanPostProcessorAdapter接口,则在实例化Bean之前,将 调用接口的postProcessBeforeInstantiation()方法
(2)根据配置情况调用Bean构造函数或工厂方法实例化Bean
(3)如果Bean配置了属性信息,在设置每个属性之前先调用InstantiationAwareBeanPostProcessorAdapter接口的 postProcessPropertyValues()方法
(4)调用Bean的属性设置方法设置属性值
(5)如果Bean实现了BeanNameAware接口,则调用setBeanName()接口方法 ;BeanFactoryAware接口 --->调用 setBeanFactory(beanFactory)
(6)如果BeanFactory装配了BeanPostProcessor后处理器,则调用BeanPostProcess.postProcessBeforeInitialization() 方法对Bean进行加工处理。BeanPostProcessor为容器提供对Bean进行后续加工处理的切入点(例如AOP、动态代理等)
(7)如果Bean实现了InitializingBean接口,则调用afterPropertiesSet()方法
(8)如果在<bean>中通过init-method属性定义了初始化方法,则执行此方法
(9)调用BeanPostProcessor的postProcessAfterInitialization()方法
(10)在实例化Bean之后,调用InstantiationAwareBeanPostProcessorAdapter接口的postProcessAfterInitialization() 方法,对已经实例化的对象进行梳妆打扮
(11)对于scope="singleton"的bean,当容器关闭时,将触发Spring对Bean后续生命周期的管理工作,如果Bean实现了DisposableBean接口,则调用接口的destroy()方法
demo演示参考: https://www.cnblogs.com/zrtqsk/p/3735273.html
总结:
1.Bean自身方法:调用构造函数实例化Bean;调用setter设置Bean的属性值及通过<bean>的init-method和destroy-method 所指定的方法
2.Bean级生命周期接口方法:如BeanFactoryAware,BeanNameAware,InitializingBean,DisposableBean,由Bean类直接实现
3.容器级生命周期接口方法:如InstantiationAwareBeanPostProcessorAdapter,BeanPostProcessor。实现类以容器附加装 置的形式注册到Spring容器中,并通过接口反射为Spring容器扫描识别