2017-10-16 9 views
0

私は、次のコンテキストのコンフィギュレーションがあります。両方のクラスで次にCamelの@BeanInjectでメンバーが初期化されないのはなぜですか?

<bean id="propertiesFactory" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="ignoreResourceNotFound" value="true"/> 
    <property name="locations"> 
    <list> 
     <value>classpath:conf.properties</value> 
    </list> 
    </property> 
</bean> 

<bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer"> 
    <property name="properties" ref="propertiesFactory"/> 
</bean> 

<bean id="messageThrottlerHolder" class="foo.bar.common.MessageThrottlerHolder"/> 
<bean id="cassandraRoute" class="foo.bar.routes.CassandraRouteBuilder"/> 

MessageThrottlerHolderをしてCassandraRouteBuilderにあります:

@BeanInject 
Properties properties; 

ワンダフル。

しかしCassandraRouteBuilderpropertiesがよく初期化されているので、NPEなしでpropertiesを使用することができます。 MessageThrottlerHolderはコンストラクタpropertiesのようにpropertiesを使用することができない一方 はヌルであり、それらを初期化する方法はありません。

propertiesがヌルである理由を確認するにはどうすればよいですか? 何が間違っている可能性があります、@BeanInject何とか初期化しませんproperties

答えて

2

Propertiesが何とかCamelのプロパティのプレースホルダなんかと思われるなら、間違っていると思います。

キャメルの@BeanInjectは、キャメルレジスタ内のBean名/ IDを使用して、Bean-mans Spring IoCとしてルックアップするためのものです。 Springを使用している場合は、Spring @Autowiredを使用することができます。

プレースホルダ、その後、あなたはCamelContextを注入し、解決するためのAPIを使用することができますプロパティからプロパティにアクセスする場合:http://static.javadoc.io/org.apache.camel/camel-core/2.20.0/org/apache/camel/CamelContext.html#resolvePropertyPlaceholders-java.lang.String-

それとも、参照するためのキー名を指定している代わりに、キャメルの@PropertyInjectを使用します。あなたがラクダ - スプリングブリッジをオンにしたので、春にプロパティを検索するための類似のアノテーションがあるかどうかはわかりません。それを調べることもできます。

+0

私は何か間違っていることを知っています:-)。しかし何が間違っているかを確認する方法は? 私は以下を持っています: '@Inject プライベートCamelContextコンテキスト。 @PropertyInject( "processing.throughput") プライベート文字列kafkaThroughput; @BeanInject( "properties") プライベートプロパティのプロパティ; '私のBeanで、まだデバッガで表示されているすべてのフィールドは、*** null ***に設定されています。だから、どこかに非常に基本的な問題がある。 –

+1

これらのフィールドはコンストラクタの後に注入されます –

+0

一方私は自分自身もそれを見つけました:-)。 可能なすべてのログをTRACEレベルに切り替えました。それからコンストラクタが呼び出された後にパラメータの注入が行われることがわかりました。 問題を解決するために、私はコンストラクタを空にして、与えられたパラメータを使ってインスタンスを初期化しているすべての機能を* init *メソッドに移動しました。 Camelのコンテキストでは、オブジェクトのインスタンス化を2つの部分に分割しました。1.パラメータ化と2. init *による初期化。 インスピレーションをありがとう。 –

関連する問題