2015-01-07 33 views
1

我已經定義了一個自定義PropertyPlaceholderConfigurer,它使REST調用獲取用於解析佔位符的屬性。我如何讓Spring運行我的自定義PropertyPlaceholderConfigurer _after_注入器運行

但是,REST調用URL由Spring注入。顯然這個注入在之後被稱爲PropertyPlaceholderConfigurer完成。這是一個例外,因爲PlaceholderConfigurer需要它時URL是空的。

我需要雞來雞蛋。有什麼辦法讓注射器在之前運行PlaceholderConfigurer?如果沒有,PlaceholderConfigurer有什麼方法可以預測即將到來的注射嗎?

回答

1

我們運行一個類似的配置,在我們的情況下,我們將數據庫憑證存儲在本地配置文件中,所有其他屬性都存儲在數據庫中。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="order" value="1"/> 
    <property name="locations"> 
     <list> 
      <value>classpath:app.properties</value> 
     </list> 
    </property> 
    <property name="placeholderPrefix" value="$["/> 
    <property name="placeholderSuffix" value="]"/> 
</bean> 

<bean id="propertyConfigurer" class="com.acme.util.DatabasePropertyPlaceholderConfigurer"> 
    <property name="order" value="2"/> 
    <property name="dataSourceName" value="dataSource"/> 
</bean> 

在我們的情況下,DatabasePropertyPlaceholderConfigurer需要訪問一個Spring bean(數據源),所以我們使用Bean工廠在覆蓋'mergeProperties()方法來檢索數據源。在你的情況下,配置要簡單得多,因爲你需要一個簡單的URL配置值。

下面的例子可能做的伎倆:(請注意,這兩個configurers使用不同的前綴/後綴:$ [],而不是$ {})

<bean id="propertyConfigurer" class="com.acme.util.RESTPropertyPlaceholderConfigurer"> 
    <property name="order" value="2"/> 
    <property name="url" value="$[config.url]"/> 
</bean> 
相關問題