私は、次のコンテキストのコンフィギュレーションがあります。両方のクラスで次に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;
ワンダフル。
しかしCassandraRouteBuilder
はproperties
がよく初期化されているので、NPEなしでproperties
を使用することができます。 MessageThrottlerHolder
はコンストラクタproperties
のようにproperties
を使用することができない一方 はヌルであり、それらを初期化する方法はありません。
properties
がヌルである理由を確認するにはどうすればよいですか? 何が間違っている可能性があります、@BeanInject
何とか初期化しませんproperties
?
私は何か間違っていることを知っています:-)。しかし何が間違っているかを確認する方法は? 私は以下を持っています: '@Inject プライベートCamelContextコンテキスト。 @PropertyInject( "processing.throughput") プライベート文字列kafkaThroughput; @BeanInject( "properties") プライベートプロパティのプロパティ; '私のBeanで、まだデバッガで表示されているすべてのフィールドは、*** null ***に設定されています。だから、どこかに非常に基本的な問題がある。 –
これらのフィールドはコンストラクタの後に注入されます –
一方私は自分自身もそれを見つけました:-)。 可能なすべてのログをTRACEレベルに切り替えました。それからコンストラクタが呼び出された後にパラメータの注入が行われることがわかりました。 問題を解決するために、私はコンストラクタを空にして、与えられたパラメータを使ってインスタンスを初期化しているすべての機能を* init *メソッドに移動しました。 Camelのコンテキストでは、オブジェクトのインスタンス化を2つの部分に分割しました。1.パラメータ化と2. init *による初期化。 インスピレーションをありがとう。 –