我有以下上下文配置:如何檢查爲什麼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」) private String kafkaThroughput; @BeanInject(「properties」) 私有屬性的屬性;'在我的bean中,仍然在調試器中我看到所有這些字段都設置爲*** null ***當我到達構造函數時。所以有一個非常基本的問題。 –
這些字段是在構造函數 –
後注入的。與此同時,我發現它也是我自己:-)。 我將所有可能的日誌切換到TRACE級別。然後我看到參數注入發生在構造函數被調用後。 爲了解決這個問題,我讓構造函數爲空,並將使用給定參數啓動實例的任何功能移動到* init *方法中。在Camel環境中,我將對象實例化分爲兩部分:1.參數化和2. init *完成的初始化。 感謝您的靈感。 –