Spring日记——BeanFactory中Bean的生命周期

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方法

猜你喜欢

转载自blog.csdn.net/qq_32198277/article/details/79219159