我正在尝试根据应用程序属性配置 spring bean,我的最终目标在以下伪代码中描述:
if ${my.config}
<bean id="myBean" class="path.to.MyBeanImplOne" />
else
<bean id="myBean" class="path.to.MyBeanImplTwo" />
end
其中 my.config
是一个 boolean 属性。
根据this 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({)'
我找不到用于访问 xml 配置的 SpEL 表达式中的属性的文档。仅在 Java 配置中支持此功能吗?
我已经看到了许多针对我的问题提出的解决方案(其中一些在 question 中)。我不想使用systemProperties因为我觉得这种配置不应该指定运行参数,并且我觉得使用 profiles对于这个特定的用例来说是多余的。
有人能够成功完成我尝试过的事情吗?或者有人可以确认 xml 配置是否确实不支持我尝试使用的语法。
最佳答案
尝试
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>
关于java - 在 Spring xml 配置中访问 SpEL 中的应用程序属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46235311/