将Spring Integration标头值设置为bean属性

时间:2016-09-08 06:06:29

标签: spring spring-integration

无论如何都要将spring integration header的值设置为bean属性。

<int:header-enricher>
  <int:header name="bId" expression="T(java.util.UUID).randomUUID()" />
</int:header-enricher>

现在在bean定义

<bean id="" class="">
    <property name="bId" value="#{headers['bId']}" />
</bean>

以上代码不起作用。抛出异常

 Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Property or field 'headers' cannot be found on object of type 'org.spri
ngframework.beans.factory.config.BeanExpressionContext' - maybe not public?

我尝试了以下方法,但它们不起作用

<bean id="" class="">
    <property name="bId" value="headers['bId']" />
</bean>

<bean id="" class="">
    <property name="bId" ref="headers['bId']" />
</bean>

以下是理想的,但expression不可用

<bean id="" class="">
    <property name="bId" expression="headers['bId']" />
</bean>

1 个答案:

答案 0 :(得分:2)

Spring Integration表达式,例如

<int:header name="bId" expression="T(java.util.UUID).randomUUID()" />

运行时表达式 - 它们适用于流经系统的消息;在大多数情况下,表达式评估的根对象是Message

表达式,如

<property name="bId" value="#{...}" />

初始化时间SpEL表达式 - 在上下文初始化期间评估它们。还没有Message对象 - 评估的根对象是应用程序上下文,因此您可以执行诸如引用其他bean上的属性之类的操作

 <property name="bId" value="#{somebean.foo}" />

这些表达方式之间存在很大差异。