美文网首页
spring循环依赖

spring循环依赖

作者: 炫迈哥 | 来源:发表于2017-04-19 21:37 被阅读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);     
    }     
});    
  • 日常开发中,遇到循环依赖问题我都是不使用autowired注入,而是通过postconstruct注解用一个init方法手动注入。

相关文章

网友评论

      本文标题:spring循环依赖

      本文链接:https://www.haomeiwen.com/subject/drbjnttx.html