mbdToUse.prepareMethodOverrides();<br>XML中的 lookup-method 和 replace-method 场景
Object bean=resolveBeforeInstantiation(beanName,mbdToUse);<br>if(bean!=null) return bean;<br>第一次调用BeanPostProcessor<br>可能有BeanPostProcessors创建代理对象<br>此步骤可阻止Spring容器创建对象,而使用自己实现的方法创建<br>
bean=applyBeanPostProcessorsBeforeInstantiation(targetType,beanName);
getBeanPostProcessors()
bp instanceof InstantiationAwareBeanPostProcessor
ibp.postProcessBeforeInstantiation(beanClass,beanName);
bean=applyBeanPostProcessorsAfterInitialization(bean,beanName);
Object beanInstance=doCreateBean(beanName,mbdToUse,args);
mbd.isSingleton() -> factoryBeanInstanceCache.remove(beanName);
BeanWrapper instanceWrapper=createBeanInstance(beanName,mbd,args);<br>实例化bean(Supplier、反射实例化、工厂实例化(@Bean))
Class<?> beanClass=resolveBeanClass(mbd,beanName);
…………
Object bean=instanceWrapper.getWrappedInstance();
Class<?> beanType=instanceWrapper.getWrappedClass();
synchronized(mbd.postProcessingLock)
applyMergedBeanDefinitionPostProcessors(mbd,beanType,beanName);
earlySingletonExposure=<br> mbd.isSingleton() &&<br> allowCircularReferences &&<br> singletonsCurrentlyInCreation.contains(beanName)<br>处理循环依赖<br>
addSingletonFactory(beanName,() -> getEarlyBeanReference(beanName,mbd,bean));
addSingletonFactory(beanName,singletonFactory)
synchronized(singletonObjects)
!singletonObjects.containsKey(beanName)<br>一级缓存没有
singletonFactories.put(beanName,singletonFactory)<br>放到三级缓存里
earlySingletonObjects.remove(beanName);<br>从二级缓存移除
registeredSingletons.add(beanName);
getEarlyBeanReference(beanName,mbd,bean)
!mbd.isSynthetic()&&hasInstantiationAwareBeanPostProcessors
getBeanPostProcessors()
bp instanceof SmartInstantiationAwareBeanPostProcessor<br>包括AbstractAutoProxyCreator,可使用AOP创建动态代理<br>
ibp.getEarlyBeanReference(exposedObject,beanName)
populateBean(beanName,mbd,instanceWrapper);<br>属性赋值
getBeanPostProcessors()
bp instanceof InstantiationAwareBeanPostProcessor
ibp.postProcessAfterInstantiation(bw.getWrappedInstance(),beanName)
mbd.getResolvedAutowireMode()
autowireByName(beanName,mbd,bw,newPvs);
autowireByType(beanName,mbd,bw,newPvs);
hasInstantiationAwareBeanPostProcessors
getBeanPostProcessors()
bp instanceof InstantiationAwareBeanPostProcessor
ibp.postProcessProperties(pvs,bw.getWrappedInstance(),beanName);
…………
exposedObject=initializeBean(beanName,exposedObject,mbd);<br>初始化<br>包括Aware、@PostConstruct、InitializingBean.afterPropertiesSet、initMethod
invokeAwareMethods(beanName,bean);<br>调用三个Aware<br>其他的在ApplicationContextAwareProcessor.invokeAwareInterfaces中调用
BeanNameAware.setBeanName(beanName);
BeanClassLoaderAware.setBeanClassLoader(getBeanClassLoader());
BeanFactoryAware.setBeanFactory(AbstractAutowireCapableBeanFactory.this);
applyBeanPostProcessorsBeforeInitialization(wrappedBean,beanName);<br>包括@PostConstruct(在CommonAnnotationBeanPostProcessor)
getBeanPostProcessors()
postProcessBeforeInitialization(result,beanName);
invokeInitMethods(beanName,wrappedBean,mbd);
applyBeanPostProcessorsAfterInitialization(wrappedBean,beanName);<br>AOP动态代理
getBeanPostProcessors()
postProcessAfterInitialization(result,beanName);
earlySingletonExposure<br>使用上边的变量
earlySingletonReference=getSingleton(beanName,false);
…………
registerDisposableBeanIfNecessary(beanName,bean,mbd);