如何在Spring中引用属性中的常量

时间:2011-09-05 15:19:45

标签: java spring

我需要将String常量指定为属性值:

<int:header name="importedFilename" />

这里“importedFilename”不应该是硬编码的,而是取自f.e.来自Constants.IMPORTED_FILENAME_HEADER静态字段。有办法吗? “int”是Spring Integration命名空间btw。此外,似乎没有适当的bean定义来替换int:header - 所以我不能使用<bean class="Header">...

2 个答案:

答案 0 :(得分:23)

<util:constant id="importedFilenameHeader"
    static-field="your.package.Constants.IMPORTED_FILENAME_HEADER"/>

然后,您应该可以通过其importedFilenameHeader元素的ID(<int:header>)来引用它,如下所示:

<int:header name="importedFilename" ref="importedFilenameHeader"/>

修改

您应该可以使用SpEL执行此操作。它是Spring的表达式语言,可以在3.0(也可能是2.5)中使用。

我认为你可以这样做:

<util:constant id="importedFilenameHeader"
    static-field="your.package.Constants.IMPORTED_FILENAME_HEADER"/>
<int:header name="#{importedFilenameHeader}" ... />
然后,

Spring应该将此值计算为我们在原始部分中定义的常量importedFilenameHeader的值(此示例中也包含该值)。

以下是获取util命名空间的一些位置信息:

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:util="http://www.springframework.org/schema/util"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-2.5.xsd">

答案 1 :(得分:10)

<int:header name="#{T(com.example.Constants).IMPORTED_FILENAME_HEADER}" />

应该有用(见http://docs.spring.io/spring/docs/3.0.x/reference/expressions.html#d0e11977)。