【问题标题】:define a string in spring context在 spring 上下文中定义一个字符串
【发布时间】:2011-10-02 21:58:39
【问题描述】:

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

在 A 上的一个 bean 中,我有:

豆>

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

【问题讨论】:

    标签: spring


    【解决方案1】:

    您可以通过声明 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 类有一个带有 String 的构造函数……我没想到……谢谢!
    • 哪个是最好的实践方法?为什么?
    【解决方案2】:

    为了完整性,这里还有另一种创建字符串的方法:

    与其调用不必要地创建新对象的 String 构造函数,不如使用 valueOf 方法,它可以在这里充当“什么都不做”构造函数:

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

    但这只是学术性的,因为解析额外的 XML 属性会导致创建字符串的开销可能大于调用 valueOf 而不是构造函数的性能增益。

    【讨论】:

      【解决方案3】:

      这也是一种方式。

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

      【讨论】:

      • 这无助于解决上下文 B 和 C 的字符串值由上下文 A 决定的不同的问题
      • 此外,您暗示 Ex 类有一个构造函数,它接受字符串作为参数。
      猜你喜欢
      • 2012-09-23
      • 2014-11-05
      • 1970-01-01
      • 2013-08-15
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多