将外部属性注入Spring上下文

时间:2010-08-25 10:05:23

标签: java spring

我在Spring 2.5托管项目中有三个应用程序共享一些代码并且细节不同。

每个应用程序都有一个属性(java.lang.String),在构建应用程序上下文之前使用该属性。

构建应用程序上下文需要一些时间,不能先发生。因此,它在每个单独的应用程序中定义。此属性在上下文定义中重复,因为在那里也需要它。我可以摆脱这种重复吗?

是否可以将该属性注入我的应用程序上下文?

3 个答案:

答案 0 :(得分: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>

然后,您可以在应用程序上下文中的任何位置引用该String,constructor-argproperty等。

答案 1 :(得分:3)

使用spring 3.0,您拥有@Value("${property}")。它使用定义的PropertyPlaceholderConfigurer bean。

在Spring 2.5中,你可以再次使用PropertyPlaceholderConfigurer,然后定义一个类型为java.lang.String的bean,然后你可以自动装配:

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

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

答案 2 :(得分:1)

如果您不想处理外部属性,可以定义一些常用bean

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

然后以某种方式初始化它,并放入常见的spring xml文件,让我们说common.xml。之后,您可以将此上下文设置为每个或您的应用程序的父项 - 在您的子上下文xml文件中:

<import resource="common.xml"/>

然后您可以将父级的属性注入您感兴趣的bean中:

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