@[TOC](第九章:Spring Bean 生命周期(2))
11.Spring Bean 初始化前阶段
已完成
• Bean 实例化
• Bean 属性赋值
• Bean Aware 接口回调
• 方法回调
• BeanPostProcessor#postProcessBeforeInitialization
12.Spring Bean 初始化阶段
• Bean 初始化(Initialization) • @PostConstruct 标注方法
• 实现 InitializingBean 接口的 afterPropertiesSet() 方法
• 自定义初始化方法
13.Spring Bean 初始化后阶段
方法回调
• BeanPostProcessor#postProcessAfterInitialization
14.Spring Bean 初始化完成阶段
• 方法回调
• Spring 4.1 +:SmartInitializingSingleton#afterSingletonsInstantiated
15.Spring Bean 销毁前阶段
• 方法回调
• DestructionAwareBeanPostProcessor#postProcessBeforeDestructio
16.Spring Bean 销毁阶段
Bean 销毁(Destroy) • @PreDestroy 标注方法
• 实现 DisposableBean 接口的 destroy() 方法
• 自定义销毁方法
17.Spring Bean 垃圾收集
Bean 垃圾回收(GC) • 关闭 Spring 容器(应用上下文)
• 执行 GC
• Spring Bean 覆盖的 finalize() 方法被回调
BeanPostProcessor 的使用场景有哪些?
答:BeanPostProcessor 提供 Spring Bean 初始化前和初始化后的生
命周期回调,分别对应 postProcessBeforeInitialization 以及
postProcessAfterInitialization 方法,允许对关心的 Bean 进行扩展,甚至是替换。
BeanFactoryPostProcessor 与BeanPostProcessor 的区别
答:BeanFactoryPostProcessor 是Spring BeanFactory(实际为
ConfigurableListableBeanFactory) 的后置处理器,用于扩展
BeanFactory,或通过 BeanFactory 进行依赖查找和依赖注入
BeanFactory 是怎样处理 Bean 生命周期?
答:
BeanFactory 的默认实现为 DefaultListableBeanFactory,其中 Bean生命周期与方法映射如下:
• BeanDefinition 注册阶段 - registerBeanDefinition
• BeanDefinition 合并阶段 - getMergedBeanDefinition
• Bean 实例化前阶段 - resolveBeforeInstantiation
• Bean 实例化阶段 - createBeanInstance
• Bean 初始化后阶段 - populateBean
• Bean 属性赋值前阶段 - populateBean
• Bean 属性赋值阶段 - populateBean
• Bean Aware 接口回调阶段 - initializeBean
• Bean 初始化前阶段 - initializeBean
• Bean 初始化阶段 - initializeBean
• Bean 初始化后阶段 - initializeBean
• Bean 初始化完成阶段 - preInstantiateSingletons
• Bean 销毁前阶段 - destroyBean
• Bean 销毁阶段 - destroyBean