有一个在Spring上下文XML文件中创build一个string常量的简写?

我需要在由多个bean共享的Spring上下文XML文件中定义一个string值。

这是我如何做到的:

<bean id="aSharedProperty" class="java.lang.String"> <constructor-arg type="java.lang.String" value="All beans need me :)"/> </bean> 

通过传递一个java.lang.String的构造函数参数来创build一个java.lang.String bean似乎是kludgy。

有没有捷径?

我知道这个属性可以使用PropertyOverrideConfigurer传递,但我想保留在XML文件中的这个属性。

对mrembisz提出的解决scheme的简写如下所示:

 <context:property-placeholder properties-ref="myProperties"/> <util:properties id="myProperties"> <prop key="aSharedProperty">All beans need me :)</prop> </util:properties> 

您可以使用PropertyPlaceholderConfigurer并保留xml中的值:

 <context:property-placeholder properties-ref="myProperties"/> <bean id="myProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="properties"> <props> <prop key="aSharedProperty">All beans need me :)</prop> </props> </property> </bean> 

然后你参考它:

 <bean id="myBean" class="my.package.MyClass"> <property name="someField" value="${aSharedProperty}"/> </bean> 

您可能能够使用以下内容:

 <bean id="abstractParent" abstract="true"> <property name="sharedProperty" value="All child beans need me" /> </bean> <bean id="bean1" class="MyClass1" parent="abstractParent"> ...non-shared properties... </bean> <bean id="bean2" class="MyClass2" parent="abstractParent"> ...non-shared properties... </bean> 

但是,这依赖于同名的财产,所以可能不适用于你。

过去我使用的是SpEL来确保一个bean具有与另一个bean相同的值:

 <bean id="myBean" class="xxx.yyy.Foo" > <property name="myProperty" value="1729" /> </bean> <bean id="copyCat" class="xxx.yyy.Bar" > <property name="anotherProperty" value="#{myBean.myProperty}" /> </bean> 

当设置值做了一些简单的赋值之外,我发现这是特别有用的。