我尝试根据应用程序属性配置spring bean,我的最终目标在以下伪代码中描述:
if ${my.config}
<bean id="myBean" class="path.to.MyBeanImplOne" />
else
<bean id="myBean" class="path.to.MyBeanImplTwo" />
end
其中my.config
是布尔属性。
根据{{3}} SpEL指南,#{${my.config} ? 'path.to.MyBeanImplOne' : 'path.to.MyBeanImplTwo'}
是一个有效的表达式,所以我尝试了以下配置:
<bean id="myBean" class="#{${my.config} ? 'path.to.MyBeanImplOne' : 'path.to.MyBeanImplTwo'}" />
但得到以下例外:
Expression parsing failed; nested exception is org.springframework.expression.spel.SpelParseException: EL1041E: After parsing a valid expression, there is still more data in the expression: 'lcurly({)'
我无法找到用于访问xl配置的SpEL表达式中的属性的文档。这仅在Java配置中受支持吗?
我已经看到了一些针对我的问题的解决方案(其中一些是在this中)。我不想使用question,因为我觉得这种配置不应该被指定为运行参数,我觉得使用systemProperties对于这个特定的用例来说是过度的。
有人能够做我成功尝试过的事吗?或者有人可以确认我在xml配置中是否确实不支持我尝试使用的语法。
答案 0 :(得分:2)
尝试
class="#{'${my.config}'.equals('true') ? 'path.to.MyBeanImplOne' : 'path.to.MyBeanImplTwo'}"
修改强>
这对我有用......
<bean id="foo" class="#{'${my.config}'.equals('true') ? 'java.lang.Integer' : 'java.lang.String'}">
<constructor-arg value="1" />
</bean>