36

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

我就是这样做的:

<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 似乎很笨拙。

有捷径吗?

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

4

4 回答 4

25

您可以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>
于 2012-04-17T07:57:37.213 回答
13

mrembisz 提出的解决方案的简写如下:

<context:property-placeholder properties-ref="myProperties"/>

<util:properties id="myProperties">
    <prop key="aSharedProperty">All beans need me :)</prop>
</util:properties>
于 2013-04-04T14:48:37.977 回答
4

我过去使用的是 SpEL 来确保一个 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>

我发现这在设置值不是简单赋值时特别有用。

于 2013-07-26T10:58:28.263 回答
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>

但是,这取决于具有相同名称的属性,因此可能不适用于您。

于 2012-04-16T23:47:59.190 回答