2017-09-15 53 views
0

我试图配置基于应用属性的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配置中不受支持。

回答

0

尝试

编辑

这对我的作品......

<bean id="foo" class="#{'${my.config}'.equals('true') ? 'java.lang.Integer' : 'java.lang.String'}"> 
    <constructor-arg value="1" /> 
</bean> 
+0

我已经试过了,但我却得到了一个例外,因为它不能转换字符串转换为布尔值,意味着它没有提取属性,而是将其作为字符串处理。 –

+0

将引号添加到'equals('true')' - 请参阅我的编辑。 –