我有几个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
并在两个地方引用它?
答案 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
读取它。