我有以下 Spring 上下文文件结构(->
代表“包含”):
A1.xml -> B.xml & C.xml
A2.xml -> B.xml
C.xml
定义一个beanc
B.xml
定义一个beanb
依赖于c
显然这对于 A2 来说是失败的,因为没有c
在上下文中定义A2
.
我怎样才能指定类似的内容:如果你有c
在上下文中将其注入b
否则只需注入null
?
我研究过 Spring EL 但是
<property name="b" ref="#{ @c?:null}" />
刚刚给了我一个NoSuchBeanDefinitionException
对于一个似乎具有价值的名字b.toString()
!?
顺便说一句:我已经知道这东西太乱了,应该尽快清理干净。
SpEL Expression的#root对象是一个BeanExpressionContext,您可以调用getObject()
该上下文的方法;如果未声明 bean,则返回 null...
<property name="bar" value="#{getObject('bar')}" />
注意:您使用value
not ref
因为它返回的是 bean,而不是 bean 定义。
这是来自的代码getObject()
public Object getObject(String key) {
if (this.beanFactory.containsBean(key)) {
return this.beanFactory.getBean(key);
}
else if (this.scope != null){
return this.scope.resolveContextualObject(key);
}
else {
return null;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)