2010-08-25 96 views
5

我在Spring 2.5託管項目中有三個應用程序共享一些代碼並在細節上有所不同。將外部屬性注入到Spring上下文中

每個應用程序都有一個屬性(java.lang.String),它在構建應用程序上下文之前使用。

構建應用程序上下文需要一些時間,不能先發生。因此,它是在每個應用程序中定義的。該屬性在上下文定義中被複制,因爲它在那裏也是需要的。我可以擺脫這種重複嗎?

是否可以將該屬性注入到我的應用程序上下文中?

回答

5

看看PropertyPlaceholderConfigurer

Spring文檔討論它here

<bean id="myPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:my-property-file.properties"/> 
    <property name="placeholderPrefix" value="$myPrefix{"/> 
</bean> 

<bean id="myClassWhichUsesTheProperties" class="com.class.Name"> 
    <property name="propertyName" value="$myPrefix{my.property.from.the.file}"/> 
</bean> 

你就必須參考該字符串的任何地方,你會在你的應用環境,constructor-argproperty

+0

但是我不能在應用程序上下文中使用我的私人字符串appName = ...作爲一些bean的屬性,我可以嗎? – DerMike 2010-08-25 11:19:32

+0

不,因爲這是Java語法,應用程序上下文是一個XML文件。如果你有一個屬性文件,並且包含appName的屬性,例如'appName = MyApp',那麼一旦PropertyPlaceholderConfigurer被設置,你就可以引用'$ myPrefix {appName}',並且(在這種情況下)到'MyApp'。 – 2010-08-25 11:23:00

+0

我希望能找到類似'ctx.addBean(String.class,appName)'的東西。 – DerMike 2010-08-25 11:50:47

3

隨着春天3.0你有@Value("${property}")喜歡。它使用定義的PropertyPlaceholderConfigurer bean。

Spring 2.5的,你可以再次使用PropertyPlaceholderConfigurer,然後定義java.lang.String類型的豆,然後可以自動裝配:

<bean id="yourProperty" class="java.lang.String"> 
    <constructor-arg value="${property}" /> 
</bean> 

@Autowired 
@Qualifier("yourProperty") 
private String property; 
1

如果你不想對付外部屬性,你可以定義一些菜豆

<bean id="parent" class="my.class.Name"/> 

然後初始化它在某種程度上,並投入常見的Spring XML文件,可以說common.xml。在此之後,就可以使這種情況下爲每個或您的應用程序父 - 在孩子方面的xml文件:

<import resource="common.xml"/> 

,然後你可以注入你的父母的特性到你有興趣豆:

<bean ... 
<property name="myProperty" value="#{parent.commonProperty}"/> 
... 
</bean> 
相關問題