spring ObjectFactory

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并存缓存 ,注意和上面区分

原文地址:https://www.cnblogs.com/zhongchang/p/11929554.html