2016-07-01 3 views
1

java.util.PropertiesオブジェクトをXML設定を介して別のBeanに挿入したいとします。 hereと記載されているソリューションを試してみましたが、これはおそらくプロパティの解決が行われる前にBeanが注入されているためです。私のクラスに注入する前にjava.util.Propertiesオブジェクトを強制的に解決できる方法はありますか?解決されたプロパティオブジェクトを別のBeanに挿入

以下は、私が持っているものの整えられた/編集されたバージョンです。 PropertiesConsumingClassは、a、b、およびcプロパティファイルのマージされていますが解決されていないプロパティを受け取ります。

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="properties" ref="allProperties" /> 
</bean> 

<bean id="allProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="propertiesArray"> 
    <util:list> 
     <util:properties location="classpath:a.properties" /> 
     <util:properties location="classpath:b.properties" /> 
     <util:properties location="classpath:c.properties" /> 
    </util:list> 
    </property> 
</bean> 

<bean class="PropertiesConsumingClass"> 
    <constructor-arg index="0" ref="allProperties" /> 
</bean> 

答えて

0

あなたの例は、Springがプロパティを呼び出すものとJavaがプロパティを呼び出すものと同じではないため、動作しません。基本的に、Springプロパティは<property>タグ内にあり、これはPropertyPlaceholderConfigurerによって解決されます。アノテーション内には、プロパティプレースホルダを使用することもできます(@Value)。どちらの方法でも、${}プレースホルダの文字列が解決されます。文字列が正しい型に変換され、Beanに注入される可能性があります。

java.util.Propertiesは、Springプロパティのプレースホルダを解決するために使用されますが、解決自体は考慮されません。 a.,b.、またはc.propertiesのいずれかのプロパティは、Springプロパティプレースホルダに置き換えられますが、PropertyPlaceholderConfigurerは、それらのファイルから取得される値が${}であるかどうかわかりません。

今や、Spring Bootは、設定ファイル内のプレースホルダを解決しますが、それを達成するための特別なソースがあります。また、あなたのアプリのライフサイクルをコントロールしたいと考えている非常に有力な図書館であり、舞台裏で多くの魔法のことをしているので、プロジェクトの最初の部分を除いて採用や落としが非常に難しいです。

関連する問題