我需要在Spring上下文XML文件中定义一个由多个bean共享的字符串值。
我就是这样做的:
<bean id="aSharedProperty" class="java.lang.String">
<constructor-arg type="java.lang.String" value="All beans need me :)"/>
</bean>
通过传递java.lang.String的构造函数参数来创建java.lang.String bean似乎是kludgy。
有快捷方式吗?
我知道可以使用PropertyOverrideConfigurer传递此属性,但我想将此属性保留在XML文件中。
答案 0 :(得分:24)
您可以使用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>
答案 1 :(得分:13)
mrembisz提出的解决方案的简写如下:
<context:property-placeholder properties-ref="myProperties"/>
<util:properties id="myProperties">
<prop key="aSharedProperty">All beans need me :)</prop>
</util:properties>
答案 2 :(得分:4)
您可以使用以下内容:
<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>
但是,这取决于具有相同名称的财产,因此可能不适用于您。
答案 3 :(得分:4)
我过去使用过的东西是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>
我发现在设置值除了简单的赋值之外做了其他的事情时,这个特别有用。