我在Spring 2.5託管項目中有三個應用程序共享一些代碼並在細節上有所不同。將外部屬性注入到Spring上下文中
每個應用程序都有一個屬性(java.lang.String
),它在構建應用程序上下文之前使用。
構建應用程序上下文需要一些時間,不能先發生。因此,它是在每個應用程序中定義的。該屬性在上下文定義中被複制,因爲它在那裏也是需要的。我可以擺脫這種重複嗎?
是否可以將該屬性注入到我的應用程序上下文中?
我在Spring 2.5託管項目中有三個應用程序共享一些代碼並在細節上有所不同。將外部屬性注入到Spring上下文中
每個應用程序都有一個屬性(java.lang.String
),它在構建應用程序上下文之前使用。
構建應用程序上下文需要一些時間,不能先發生。因此,它是在每個應用程序中定義的。該屬性在上下文定義中被複制,因爲它在那裏也是需要的。我可以擺脫這種重複嗎?
是否可以將該屬性注入到我的應用程序上下文中?
看看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-arg
,property
等
隨着春天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;
如果你不想對付外部屬性,你可以定義一些菜豆
<bean id="parent" class="my.class.Name"/>
然後初始化它在某種程度上,並投入常見的Spring XML文件,可以說common.xml
。在此之後,就可以使這種情況下爲每個或您的應用程序父 - 在孩子方面的xml文件:
<import resource="common.xml"/>
,然後你可以注入你的父母的特性到你有興趣豆:
<bean ...
<property name="myProperty" value="#{parent.commonProperty}"/>
...
</bean>
但是我不能在應用程序上下文中使用我的私人字符串appName = ...作爲一些bean的屬性,我可以嗎? – DerMike 2010-08-25 11:19:32
不,因爲這是Java語法,應用程序上下文是一個XML文件。如果你有一個屬性文件,並且包含appName的屬性,例如'appName = MyApp',那麼一旦PropertyPlaceholderConfigurer被設置,你就可以引用'$ myPrefix {appName}',並且(在這種情況下)到'MyApp'。 – 2010-08-25 11:23:00
我希望能找到類似'ctx.addBean(String.class,appName)'的東西。 – DerMike 2010-08-25 11:50:47