在Spring xml配置中访问SpEL中的应用程序属性

时间:2017-09-15 08:41:49

标签: java xml spring spring-el

我尝试根据应用程序属性配置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配置中是否确实不支持我尝试使用的语法。

1 个答案:

答案 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>