在 Spring xml 配置中访问 SpEL 中的应用程序属性
Access application properties within SpEL in Spring xml configuration
我正在尝试基于应用程序 属性 配置一个 spring bean,我的最终目标在以下伪代码中描述:
if ${my.config}
<bean id="myBean" class="path.to.MyBeanImplOne" />
else
<bean id="myBean" class="path.to.MyBeanImplTwo" />
end
其中 my.config
是一个布尔值 属性。
根据 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). I'd like to not use systemProperties since I feel this sort of configuration should not be specified a run arguments, and I feel the use of 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>
我正在尝试基于应用程序 属性 配置一个 spring bean,我的最终目标在以下伪代码中描述:
if ${my.config}
<bean id="myBean" class="path.to.MyBeanImplOne" />
else
<bean id="myBean" class="path.to.MyBeanImplTwo" />
end
其中 my.config
是一个布尔值 属性。
根据 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). I'd like to not use systemProperties since I feel this sort of configuration should not be specified a run arguments, and I feel the use of 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>