Jen*_*der 7 java spring optional spring-el
我有以下弹簧上下文文件的结构(->
代表'包含'):
A1.xml -> B.xml & C.xml
A2.xml -> B.xml
Run Code Online (Sandbox Code Playgroud)
C.xml
定义一个bean c
B.xml
定义b
一个依赖于的beanc
显然这对于A2来说是失败的,因为c
在上下文中没有定义A2
.
我如何指定类似的东西:如果你c
在上下文中注入它,b
否则只是注入null
?
我看了一下Spring EL但是
<property name="b" ref="#{ @c?:null}" />
Run Code Online (Sandbox Code Playgroud)
刚刚给了我一个NoSuchBeanDefinitionException
名字,似乎是值b.toString()
!
顺便说一句:我已经知道这件东西太乱了,应该尽快清理干净.
Gar*_*ell 19
SpEL Expression的#root对象是BeanExpressionContext,您可以getObject()
在该上下文中调用该方法; 如果没有声明bean,它返回null ...
<property name="bar" value="#{getObject('bar')}" />
Run Code Online (Sandbox Code Playgroud)
注意:您使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
我完全同意清理你的XML :-)
如果你正在使用基于注释的注入,你可能会尝试这个技巧
@Autowired( required=false )
Run Code Online (Sandbox Code Playgroud)
我不确定这是否适用于您的情况,但值得一试.
归档时间: |
|
查看次数: |
7741 次 |
最近记录: |