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

标签 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 是一个 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/

相关文章:

c# - 为什么我们不应该将业务逻辑放在服务中?我们会更换我们的服务吗?

java - 调试: Using PENTAHO_JAVA_HOME

java - Tapestry4 转发错误

xml - 使用 R 抓取 XML 文件 : xpathSApply

PHP 简单 XML 删除所有子项

java - 如何在不运行服务器的情况下查看thymeleaf模板

java - Spring Web PUT 方法传递空值

java - Spring + Quartz 重新调度或更新触发器?

java - 如何使用 jaxb 循环处理多个 xml 文件

java - Spring App SonarQube 问题 S3749