BeanFactory中Bean的生命周期流程图如下
Created with Raphaël 2.1.2
开始
调用InstantiationAwareBeanPostProcessor的
postProcessBeforeInstantiation方法
实例化
调用InstantiationAwareBeanPostProcessor的
postProcessAfterInstantiation方法,对已实例化对象进行修改
调用InstantiationAwareBeanPostProcessor的
postProcessPropertyValues方法
给Bean设置配置属性
调用BeanNameAware的setBeanName方法,
设置bean的名字
调用BeanFactoryAware的setBeanFactory方法,
设置指定的BeanFactory
调用BeanPostProcessor的postProcessBeforeInitialization方法,
返回加工处理Bean,提供后期加工的切入点
如果用实现InitializingBean接口的话,
调用InitializingBean的afterPropertiesSet方法
调用init-method属性配置的初始化方法
调用BeanPostProcessor的postProcessAfterInitialization方法
Bean的scope为Singleton?
Spring缓存池中准备就绪的Bean
调用DisposableBean的afterPropertiesSet方法
调用destory-method属性配置的销毁方法
结束
将准备就绪的Bean交给使用者
yes
no
以上方法可分为三类
1.Bean自身的方法 Bean的构造方法,通过配置文件去设置Bean的属性,执行Bean的init-method和destory-method 2.Bean集生命周期的方法(个性化处理) BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean的接口方法,由Bean类来直接实现 3.容器集生命周期方法(共性化处理) InstantiationAwareBeanPostProcessor,BeanPostProcessor我们称之为后处理器,一般不由Bean本身实现,它们独立于Bean,实现类以附加装置的形式注入到Spring容器中,Spring创建容器时,这些后处理器都会发生作用
与ApplicationContext不同
调用InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法之前会调用BeanFactoryProcessor的postProcessBeanFactory方法,在调用BeanFactoryAware的setBeanFactory方法之后调用调用ApplicationContextAware的setApplicationContext方法