0 总览
1. Spring Bean 元信息配置阶段
2. Spring Bean 元信息解析阶段
3. Spring Bean 注册阶段
4. Spring BeanDefinition 合并阶段
5. Spring Bean Class 加载阶段
6. Spring Bean 实例化前阶段
InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation 若返回为null,则返回默认的实例对象 若返回不为null,则此对象为最终返回的对象,也就是实例化了一个与配置文件中不同的新的对象
7. Spring Bean 实例化阶段
8. Spring Bean 实例化后阶段
实例化后赋值前的操作
9. Spring Bean 属性赋值前阶段
10. Spring Bean Aware接口回调阶段
11. Spring Bean 初始化前阶段
12. Spring Bean 初始化阶段
13. Spring Bean 初始化后阶段
14. Spring Bean 初始化完成阶段
15. Spring Bean 销毁前阶段
16. Spring Bean 销毁阶段
17. Spring Bean 垃圾收集
18. 面试题
1 BeanPostProcessor 的使用场景有哪些
BeanPostProcessor 提供 Spring Bean 初始化前和初始化后的生命周期回调,分别对应 postProcessBeforeInitialization 以及postProcessAfterInitialization 方法,允许对关心的Bean 进行扩展,甚至是替换。 加分项:其中,ApplicationContext 相关的 Aware 回调也是基于BeanPostProcessor 实现,即 ApplicationContextAwareProcessor
2 BeanFactoryPostProcessor 与BeanPostProcessor 的区别
BeanFactoryPostProcessor 是 Spring BeanFactory(实际为ConfigurableListableBeanFactory) 的后置处理器,用于扩展BeanFactory,或通过 BeanFactory 进行依赖查找和依赖注入。加分项:BeanFactoryPostProcessor 必须有 Spring ApplicationContext 执行,BeanFactory 无法与其直接交互。 而 BeanPostProcessor 则直接与BeanFactory 关联,属于N 对1 的关系
3 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