spring循环依赖

2017-04-19  本文已影响0人  炫迈哥

Spring容器将每一个<b>正在创建的bean</b>标识符放在一个"当前创建bean池"中,bean标识符在创建过程中将一直保持在这个池中,因此如果在创建bean过程中发现自己已经在"当前创建bean池"里时,将抛出BeanCurrentlyInCreationException异常表示循环依赖;而对于创建完毕的bean将从"当前创建bean池"中<b>清除</b>掉。

spring会先调动构造器生成这样一个还未完成基本属性注入的EarlyBeanReference,放到创建池中,当使用setter注入循环依赖属性时,使用这个还未完全完成注入的bean就行了,所以setter注入(单例下)spring是能自己解决循环依赖问题的。而构造器注入spring没办法自动解决这个循环依赖。在非单例模式下,spring也不会缓存bean,所以也不能自动解决依赖注入问题。

addSingletonFactory(beanName, new ObjectFactory() {     
    public Object getObject() throws BeansException {     
        return getEarlyBeanReference(beanName, mbd, bean);     
    }     
});    
上一篇下一篇

猜你喜欢

热点阅读