2016-09-08 10 views
2

Spring統合ヘッダーの値をBeanプロパティーに設定する必要はありますか。 Bean定義Spring統合ヘッダー値をBeanプロパティーに設定してください

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

この上記のコードは動作しませんで今

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

。これは

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> 

答えて

2

Spring統合表現は使用できません例えば、

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

ランタイムの式で、システムを流れるメッセージに適用されます。ほとんどの場合、式評価のルートオブジェクトはMessageです。このよう

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

として

式は初期時間SPEL式です - 彼らは、コンテキストの初期化中に評価されます。何Messageオブジェクトはまだありません - あなたが他のBean

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

式のこれらのタイプの間には大きな違いがあります

に参照するプロパティのようなものを行うことができますので、評価のためのルートオブジェクトは、アプリケーションコンテキストです。

関連する問題