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

3duebb1j  于 2023-01-24  发布在  Java
关注(0)|答案(2)|浏览(109)

我正在尝试配置一个基于应用程序属性的springbean,我的最终目标在下面的伪代码中描述:

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中)。我不想使用systemProperties,因为我觉得这种配置不应该指定为运行参数,而且我觉得使用配置文件对于这个特定的用例来说是多余的。
有人能够成功地做我尝试的事情吗?或者有人能够确认我尝试使用的语法在xml配置中是否确实不受支持吗?

n1bvdmb6

n1bvdmb61#

试试看

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>
hgqdbh6s

hgqdbh6s2#

不幸的是,您不能在www.example.com文件中使用SpELapplication.properties。
文件
在分析应用程序属性文件和填充环境时,不会处理这些文件中的SpEL表达式。但是,可以在@Value中编写SpEL表达式。如果应用程序属性文件中的属性值是SpEL表达式,则在通过@Value使用时将对其进行计算。

相关问题