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.StringBeanを作成するのは、厄介なようです。

ショートカットはありますか?

このプロパティはPropertyOverrideConfigurerを使用して渡すことができることは知っていますが、このプロパティをXMLファイル内に保持したいと思います。

4

4 に答える 4

25

PropertyPlaceholderConfigurerxmlで値を使用および保持できます。

<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

次のものを使用できる場合があります。

<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 に答える
4

私が過去に使用したものは、Beanが別のBeanと同じ値を持つことを確認するためのSpELです。

<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 に答える