【问题标题】:Set Spring Integration header value to bean property将 Spring Integration 标头值设置为 bean 属性
【发布时间】:2016-09-08 06:06:29
【问题描述】:

是否可以将 spring 集成标头的值设置为 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>

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    Spring 集成表达式,如

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

    runtime 表达式 - 它们适用于流经系统的消息;在大多数情况下,表达式求值的根对象是Message

    表达式如

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

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

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

    这几种表达方式有很大区别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      相关资源
      最近更新 更多