访问应用程序属性
问题描述:
我试图配置基于应用属性的Spring bean,我的最终目标是在下面的伪代码来描述:访问应用程序属性
if ${my.config}
<bean id="myBean" class="path.to.MyBeanImplOne" />
else
<bean id="myBean" class="path.to.MyBeanImplTwo" />
end
其中my.config
是一个布尔属性。 据this规划环境地政司指导,#{${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({)'
我不能在访问属性找到文档用于xml配置的SpEL表达式。这仅支持Java配置吗?
我见过一些提出的解决方案,我的问题(其中一些在这question)。我不想使用systemProperties,因为我觉得这种配置不应该被指定为运行参数,我觉得使用profiles对于这个特殊的用例来说是矫枉过正的。
有人能够做我尝试过的成功吗?或者,有人可以确认我尝试使用的语法是否确实在xml配置中不受支持。
答
尝试
编辑
这对我的作品......
<bean id="foo" class="#{'${my.config}'.equals('true') ? 'java.lang.Integer' : 'java.lang.String'}">
<constructor-arg value="1" />
</bean>
我已经试过了,但我却得到了一个例外,因为它不能转换字符串转换为布尔值,意味着它没有提取属性,而是将其作为字符串处理。 –
将引号添加到'equals('true')' - 请参阅我的编辑。 –