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並存緩存 ,注意和上面區分