Object bean = resolveBeforeInstantiation(beanName, mbdToUse)
从容器中找到InstantiationAwareBeanPostProcessor并调用postProcessBeforeInstantiation(beanClass, beanName)实例化
找到所有BeanPostProcessor的实现类调用postProcessAfterInitialization(result, beanName)实例化后方法
Object beanInstance = doCreateBean(beanName, mbdToUse, args)
instanceWrapper = createBeanInstance(beanName, mbd, args)
实例化创建出原始bean
applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName)
调用所有MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition(mbd, beanType, beanName)方法
addSingletonFactory(beanName, singletonFactory)
添加三级缓存singletonFactory为lamada表达式() -> getEarlyBeanReference(beanName, mbd, bean)
populateBean(beanName, mbd, instanceWrapper)
调用InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation()方法
autowireByName(beanName, mbd, bw, newPvs)
autowireByType(beanName, mbd, bw, newPvs)
调用InstantiationAwareBeanPostProcessor.postProcessProperties()方法
调用InstantiationAwareBeanPostProcessor.postProcessPropertyValues()方法
applyPropertyValues(beanName, mbd, bw, pvs)
exposedObject = initializeBean(beanName, exposedObject, mbd)
invokeAwareMethods(beanName, bean)
BeanNameAware
BeanClassLoaderAware
BeanFactoryAware
applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName)
调用所有BeanPostProcessor.postProcessBeforeInitialization(result, beanName)方法
invokeInitMethods(beanName, wrappedBean, mbd)
调用InitializingBean.afterPropertiesSet()方法
invokeCustomInitMethod(beanName, bean, mbd)
调用init-method指定的方法
wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName)
调用所有BeanPostProcessor.postProcessAfterInitialization(result, beanName)方法
Object earlySingletonReference = getSingleton(beanName, false)
循环依赖中A->B->A, 当A的属性注入完成后, A的实例已经在二级缓存中了, 此时会从二级缓存中拿到A, 后面那个false代表不能再从三级缓存中拿A了
循环依赖A->B->A中的B属于非循环依赖和正常的非循环依赖在这里均获取的为null, 返回的是原始对象