Spring:定义bean的属性(引用其他bean)作为可选
有两个 bean 定义:
文件 a.xml
<bean id="A" class="com.A">
<property name="bClass" ref="B"/>
</bean>
文件 b.xml
<bean id="B" class="com.B"/>
在某些情况下,文件 b.xml 不包含 bean B 的定义。
从另一方面来看,文件 a.xml 始终包含指向 B 定义的链接。
如何将对 B bean 的引用定义为可选,以避免org.springframework.beans.factory.NoSuchBeanDefinitionException
Have two bean definitions:
file a.xml
<bean id="A" class="com.A">
<property name="bClass" ref="B"/>
</bean>
file b.xml
<bean id="B" class="com.B"/>
In some cases file b.xml does not contain definition of bean B.
And from other side,file a.xml always contains link to B definition.
How to define reference to B bean to be optional, in order to avoid org.springframework.beans.factory.NoSuchBeanDefinitionException
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你不能。如果您有对
B
的引用,则B
必须存在。您需要确保某种存根B
存在,其定义将被b.xml
中的B
的定义覆盖。或者,不要将
B
注入A
,而是让A
使用BeanFactory 查找
,并以编程方式处理可能缺少B
。 getBean("B")B
的情况。You can't. If you have a reference to
B
, thenB
must exist. You need to ensure that some kind of stubB
exists, the definition of which would be overridden by the definition ofB
inb.xml
.Alternatively, don't inject
B
intoA
, but makeA
look upB
usingBeanFactory.getBean("B")
, and handle the potential absence ofB
programmatically.另一种可能性(除了斯卡夫曼建议的这些之外)是扭转依赖性。让 bean
B
知道 beanA
。它甚至可以在其中注册自己 - 即调用 setter,例如:Yet another possibility (on top of these suggested by skaffman) is to reverse the depenency. Let the bean
B
know the beanA
. It can even register itself within it - that is, call the setter, e.g.:@Autowired(required=false) 有帮助
@Autowired(required=false) helped