无论如何都要将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>
答案 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}" />
这些表达方式之间存在很大差异。