我在Spring 2.5托管项目中有三个应用程序共享一些代码并且细节不同。
每个应用程序都有一个属性(java.lang.String
),在构建应用程序上下文之前使用该属性。
构建应用程序上下文需要一些时间,不能先发生。因此,它在每个单独的应用程序中定义。此属性在上下文定义中重复,因为在那里也需要它。我可以摆脱这种重复吗?
是否可以将该属性注入我的应用程序上下文?
答案 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-arg
,property
等。
答案 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>