如何在Spring中连接相互依赖的bean?

我想声明两个bean并使用Springdependency injection实例化它们?

      

但Spring抛出一个exception,说“当前处于创建状态的FactoryBean从getObject返回null”

为什么相互依赖的bean布线不能在这里工作? 我应该在任何地方指定defferred属性绑定吗?

不幸的是容器初始化在Spring中的工作方式,bean只有在完全初始化后才能注入另一个bean。 在您的情况下,您有一个循环依赖项,可以防止任何bean初始化,因为它们相互依赖。 要解决这个问题,您可以在其中一个bean中实现BeanFactoryAware,并使用beanFactory.getBean(“beanName”)获取对另一个bean的引用。

neesh是对的,Spring并不是开箱即用的。

相互依赖的bean暗示了设计问题。 “干净”的方法是重新设计您的服务,使其不存在这种奇怪的依赖关系,当然前提是您可以控制实现。

您可以实现设置依赖关系的BeanPostProcessor 。

要么…

请参阅Costin的回复:

http://forum.springframework.org/showthread.php?t=19569&highlight=circular+dependencies

请参阅Andreas的回复:

http://forum.springframework.org/showthread.php?t=29572&highlight=circular+dependencies

您可以扩展正在使用的ApplicactionContext并覆盖方法createBeanFactory()

  protected DefaultListableBeanFactory createBeanFactory(){ DefaultListableBeanFactory beanFactory = super.createBeanFactory(); // By default this is false; beanFactory.setAllowRawInjectionDespiteWrapping( true ); return beanFactory; } 

这有效,但要小心,因为这允许循环引用。