Spring XML中的常见值配置

时间:2012-07-12 07:44:29

标签: java spring configuration

我有几个Spring bean,其中所有属性值之一都是String值相同。有没有办法可以在一个地方用XML定义这个String并在属性值设置的所有bean中引用它?

<bean id="somebean" class="test.SomeBean">
   <property name="property1" ref="someValue"></property>
   <property name="commonProperty" value="commonValue"></property>

<bean id="nextBean" class="test.NextBean">
   <property name="property2" ref="someValue"></property>
   <property name="commonProperty" value="commonValue"></property>

如何在一个单独的地方设置commonValue并在两个地方引用它?

4 个答案:

答案 0 :(得分:5)

试试这样。

<bean id="commonConfig" abstract="true">
    <property name="commonField" value="CommonValue"></property>
</bean>

<bean id="class1" class="com.dataclass.Class1" parent="commonConfig">
    <property name="field1" value="value1"></property>
</bean>
<bean id="class2" class="com.dataclass.Class2" parent="commonConfig">
    <property name="field2" value="value2"></property>
</bean>

Class1&amp; Class2有一个公共字段名称“commonField”,parent属性仅用于此目的。

在Spring中,这称为bean定义继承(这不是java类继承,上面的示例Class1&amp; n Class不在各自的java文件中继承。)

有关更多详细信息,请查看Spring doc的link

答案 1 :(得分:3)

我以前从未尝试过,但这应该可行

<bean id="commonProp" class="java.lang.String">
    <constructor-arg name="original" value="yourString"></constructor-arg>
</bean>

然后,在每个bean中你需要引用它:

<bean id="somebean" class="test.SomeBean">
   <property name="property1" ref="someValue"></property>
   <property name="commonProperty" ref="commonProp"></property>
</bean>

答案 2 :(得分:1)

您可以在某些“init_constants.properties”文件中定义字符串属性。然后你应该在spring xml:

中加载属性文件
<bean id="properties"
        class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:db.properties</value>
                <value>classpath:mail.properties</value>
                <value>classpath:init_constants.properties</value>
            </list>
        </property>
    </bean> 

之后,您可以使用xml:

注入此属性
<bean id="somebean" class="test.SomeBean">
   <property name="property1" ref="{$prop1}"></property>
   <property name="commonProperty" value="commonValue"></property>
</bean>

或使用@Value注释的代码:

@Value(value="${prop1}")
private String property1;

答案 3 :(得分:0)

那么如果commonValue是字符串,那么你可以将它放在属性文件中并使用@Value annotation读取它。