Подтвердить что ты не робот

Есть ли сокращение для создания константы String в XML файле контекста Spring?

Мне нужно определить строковое значение в XML файле контекста Spring, который разделяется несколькими beans.

Вот как я это делаю:

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

Создание java.lang.String bean путем передачи аргумента конструктора java.lang.String кажется kludgy.

Есть ли ярлык?

Я знаю, что это свойство можно передать с помощью PropertyOverrideConfigurer, но я хочу сохранить это свойство в файле XML.

4b9b3361

Ответ 1

Сокращение до решения, предлагаемого mrembisz, выглядит следующим образом:

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

<util:properties id="myProperties">
    <prop key="aSharedProperty">All beans need me :)</prop>
</util:properties>

Ответ 2

Вы можете использовать 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>

Ответ 3

Возможно, вы сможете использовать следующее:

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

Однако это зависит от свойства с тем же именем, поэтому оно не может быть применимо для вас.

Ответ 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>

Я нашел, что это особенно полезно при установке значения, сделанного чем-то другим, кроме простого назначения.