2

我有几个 Spring bean,其中所有它们的属性值之一都是相同的String值。有没有一种方法可以让我String在一个地方在 XML 中定义它并在属性值设置的所有 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

4 回答 4

6

像这样试试。

<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 和 Class2 有一个共同的字段名称“commonField”,父属性仅用于此共同目的。

在 Spring 中,这称为 bean 定义继承(这不是 java 类继承,上面的示例 Class1 和 n 类没有在它们各自的 java 文件中继承。)

有关更多详细信息,请查看 Spring 文档的链接

于 2012-07-12T08:16:34.453 回答
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>
于 2012-07-12T07:49:06.433 回答
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;
于 2012-07-12T08:07:39.200 回答
0

好吧,如果 commonValue 是字符串,那么您可以将其放入属性文件并使用@Value annotation.

于 2012-07-12T07:48:03.460 回答