是否有在Spring上下文XML文件中创建String常量的简写?

时间:2012-04-16 22:30:28

标签: java spring

我需要在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文件中。

4 个答案:

答案 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>

我发现在设置值除了简单的赋值之外做了其他的事情时,这个特别有用。