容器周期-20-总结

知识:

Spring 的 Bean 创建都会调用 AbstractAutowireCapableBeanFactory#createBean(xxx) 这个方法

流程总结-doGetBean
  1. 调用 transformedBeanName() 转换名称
  2. getSingleton(beanName) 存在直接返回
  3. getMergedLocalBeanDefinition 合并 BeanDefinition
  4. 调用 AbstractAutowireCapableBeanFactory#createBean 创建 bean
流程总结-createBean(xx)
  1. 调用 resolveBeanClass() 解析 bean 名称。

  2. 验证方法是否可以覆盖

  3. 生命周期,实例化调用 InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation(xx) 方法

  4. 生命周期,初始化之后,调用 BeanPostProcessor#postProcessAfterInitialization(xx) 方法

    1. 说明:如果 3 返回不为 null,才会执行 4,执行完 4 后直接返回 bean 了。
  5. 调用 doCreateBean(xx) 进行创建流程。

  6. 创建 BeanWrapper 用于包装 BeanDefinition。

  7. 生命周期,MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition(xx) 合并 BeanDefinition。

  8. 循环依赖,addSingletonFactory()

  9. 属性填充,populateBean(xxx)

  10. InitializeBean() xxx 里面的声名周期

  11. 生命周期,aware 注入

  12. 生命周期,PostProcessor#postProcessBeforeInitialization

  13. 生命周期,invokeInitMethods

  14. 生命周期,PostProcessor#postProcessAfterInitialization