AspectJAwareAdvisorAutoProxyCreator implements PostProcessor
postProcessorAfterInitialization(Object bean, String beanName)
1.在这个方法中 植入 AOP
2.这个方法的调用 initializeBean方法
doCreateBean(beanName, BeanDefinition, args) --> initializeBean --> invokeAwareMethods
AutowireCapableBeanFactory
doCreateBean(String beanName, BeanDefinition ,args)
// 单例 && 是否允许循环依赖 &&正在创建中
earlySingletonExposure
将创建Bean的ObjectFactory放入缓存,ObjectFactory传入真正创建的“bean”对象,调用ObjectFactory的getObject时调用getEarlyBeanReference返回传入的“bean”,这个“bean”是相同的对象(“==”),这样实现了循环引用
addSingletonFactory(beanName, new ObjectFactory() {
@Override
public Object getObject() {
return getEarlyBeanReference(beanName, beanDefintion, bean);
}
});
AbstractBeanFactory 中 doGetBean(String name, Class<?> requiredType, Object[] args, typecheckOnly) 中
sharedSingleton = getSingleton(beanName, new ObjectFactory() {
@Override
public Object getObject() {
return createBean(beanName, beanDefinition,args);
}
})
这个也用到ObjectFactory 是直接创建了 singleton并存缓存 ,注意和上面区分