【发布时间】:2011-10-02 21:58:39
【问题描述】:
我有三个(A,B,C)spring context.xml,A为基本配置,B和C导入A。
在 A 上的一个 bean 中,我有:
现在我想在 B 和 C 上下文中定义属性 myString,是否可以在不创建和加载两个不同的属性文件的情况下做到这一点?
【问题讨论】:
标签: spring
我有三个(A,B,C)spring context.xml,A为基本配置,B和C导入A。
在 A 上的一个 bean 中,我有:
现在我想在 B 和 C 上下文中定义属性 myString,是否可以在不创建和加载两个不同的属性文件的情况下做到这一点?
【问题讨论】:
标签: spring
您可以通过声明 String 类型的 bean 来尝试另一种方法,而不是处理 Properties。
这边:
一个
<bean class="com.example.Ex">
<property name="aString" ref="str" />
</bean>
然后您在 B 和 C 上下文中以这种方式声明“str”引用:
B
<bean id="str" class="java.lang.String">
<constructor-arg value="string_1"/>
</bean>
C
<bean id="str" class="java.lang.String">
<constructor-arg value="string_2"/>
</bean>
【讨论】:
为了完整性,这里还有另一种创建字符串的方法:
与其调用不必要地创建新对象的 String 构造函数,不如使用 valueOf 方法,它可以在这里充当“什么都不做”构造函数:
<bean id="str" class="java.lang.String" factory-method="valueOf">
<constructor-arg value="string_1"/>
</bean>
但这只是学术性的,因为解析额外的 XML 属性会导致创建字符串的开销可能大于调用 valueOf 而不是构造函数的性能增益。
【讨论】:
这也是一种方式。
<bean id="str" class="com.example.Ex">
<constructor-arg type="java.lang.String" value="INDIA"/>
【讨论】: