bean 实例化部分生命周期面试题
说说 bean 实例化部分的生命周期
bean 实例化阶段的的生命周期包含三大步骤:
- bean 的实例化
- 属性赋值 + 依赖注入
- bean 的初始化生命周期回调
- bean 实例化的销毁
在所有非延迟加载的单实例 bean 初始化之前,会先初始化所有的 BeanPostProcess。
在 ApplicationContext
的 refresh()
方法中,finishBeanFactoryInitialization
步骤会初始化所有非延迟加载的单实例 bean。实例化 bean 的入口是 getBean()
-> doGetBean()
,该阶段会合并 eanDefinition
,并根据 bean 的 scope
选择实例化 bean 的策略。
创建 bean 的逻辑会走 createBean()
方法,该方法中会先执行所有 InstantiationAwareBeanPostProcessor
的 postProcessorBeforeInstantiation()
方法初始化 bean 实例;如果 nstantiationAwareBeanPostProcessor
没有创建 bean 实例,则会调用 doCreate(
方法创建 bean 实例。在 doCreateBean()
方法中,会根据 bean 的 Class 中的构造器定义,决定如何实例化 bean,如果没有定义构造器,则会使用无参构造器,反射创建 bean 实例
bean 对象创建完成后,就会执行属性赋值 + 依赖注入的步骤