在Spring上下文中定义一个字符串

21

我有三个 (A,B,C) spring context.xml,其中A用于基本配置,B和C导入A。

在A的bean中有:

<bean class="com.example.Ex">
    <property name="aString" value="${myString}" />
</bean>

现在我想在B和C上定义属性 myString,是否可以在不创建和加载两个不同的属性文件的情况下完成?

3个回答

64
你可以尝试使用一种替代方法,即声明一个 String 类型的 Bean,而不是处理 Properties。

这样做:

A

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

2
没错...String类有一个带有String参数的构造函数...我没有想到过..谢谢! - rascio
哪种方法是最佳实践?为什么? - Bilbo Baggins

10

为了完整性,这里介绍另一种创建字符串的方式:

与调用String构造函数不同,它会强制创建一个不必要的新对象,使用valueOf方法可能是一个更好的选择,它可以作为一个“什么也不做”的构造函数:

<bean id="str" class="java.lang.String" factory-method="valueOf">
  <constructor-arg value="string_1"/>
</bean>

然而,这只是学术上的问题,因为解析额外的XML属性会导致产生字符串的开销,可能会比调用valueOf方法而不是构造函数所获得的性能收益更大。


-6

这也是其中一种方法。

<bean id="str" class="com.example.Ex">
<constructor-arg type="java.lang.String" value="INDIA"/>


1
这并不能解决上下文B和C对于字符串的值有不同决策的问题。 - Kieran
此外,您暗示类Ex有一个构造函数,它接受一个字符串作为参数。 - Peter Wippermann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接