spring bean的生成过程(从BeanDefinition
2020-07-09 本文已影响0人
黑铁大魔王
- 实例化之前,从beanDefinitionMap里取出beanDef
- 创建SpringBean
- 生成包装的class
- createBean()
- 第一次调用后置处理器(postProcessBeforeInitialization, postProcessAfterInitialization)
- createBeanInstance()
- 第二次调用后置处理器(determineCandidateConstructors)推断构造方法
- 第三次调用给后置处理器(postProcessMergedBeanDefinition)合并beanDef
- 缓存beanFactory
- 第四次调用后置处理器(getEarlyBeanReference)处理循环依赖
- 填充属性(populateBean)
- 第五次调用后置处理器(postProcessAfterInstantiation)
- 第六次调用后置处理器(postProcessProperties, postProcessPropertyValues)为pvsToUse赋值
- 初始化bean(initializeBean),返回SpringBean
- 第七次调用后置处理器(postProcessBeforeInitialization)
- 第八次调用后置处理器(postProcessAfterInitialization)
- 生成包装的class
- addSingleton
this.singletonObjects.put(beanName, singletonObject);
this.singletonFactories.remove(beanName);
this.earlySingletonObjects.remove(beanName);
this.registeredSingletons.add(beanName);