Spring:将bean的属性(引用其他bean)定义为可选

时间:2010-11-25 10:03:35

标签: spring reference properties javabeans autowired

有两个bean定义:

file a.xml

<bean id="A" class="com.A">
 <property name="bClass" ref="B"/>
</bean>

file b.xml

<bean id="B" class="com.B"/>

在某些情况下,文件b.xml不包含bean B的定义 从另一方面来说,文件a.xml始终包含指向B定义的链接。

如何将对B bean的引用定义为可选,以避免org.springframework.beans.factory.NoSuchBeanDefinitionException

3 个答案:

答案 0 :(得分:2)

你做不到。如果您引用B,则必须存在B。您需要确保存在某种存根B,其定义将被Bb.xml的定义所覆盖。

或者,不要将B注入A,而是A使用B查找BeanFactory.getBean("B"),并处理B的可能缺席1}}以编程方式。

答案 1 :(得分:1)

另一种可能性(除了skaffman建议的这些)是扭转依赖性。让bean B知道bean A。它甚至可以在其中注册 - 也就是说,调用setter,例如:

public class B {
  private A a;

  public void init() {
    a.setB(this);
  }
}

答案 2 :(得分:0)

@Autowired(required = false)帮助