【问题标题】:Spring: PropertyPlaceHolderConfigurer to set values for non-string/integer propertiesSpring:PropertyPlaceHolderConfigurer 为非字符串/整数属性设置值
【发布时间】:2010-03-01 16:54:44
【问题描述】:

我看到的所有使用 PropertyPlaceHolderConfigurer 的示例似乎都在设置简单的值,例如字符串和整数。

如何使用 PPC 来设置类的值。

例如如果我有一个班级签名Source(String name, DistributionSample batch, DistributionSample delay)

我将如何设置批处理和延迟属性。

还有一个小问题。 DistributionSample 是一个抽象类。从好的方面来说,使用 propertyPlaceHolder 的类知道需要实例化的“Solid”类的 beanName。

任何帮助将不胜感激。

【问题讨论】:

    标签: java spring properties


    【解决方案1】:

    正如你所说,PropertyPlaceHolderConfigurer 仅适用于 String 可以转换为目标类型的 String 值。

    因此,您可以告诉 Spring 如何将 convert a String 转换为 DistributionSample 对象,或者您可以使用属性占位符来引用 bean 名称,例如

    <bean class="Source">
       <constructor-arg value="source name"/>
       <constructor-arg ref="${batch.beanName}"/>
       <constructor-arg ref="${delay.beanName}"/>
    </bean>
    
    <bean id="batch" class="....."/>
    <bean id="delay" class="....."/>
    

    如果您的属性文件包含

    batch.beanName = batch
    delay.beanName = delay
    

    然后将解析 bean 引用。如果对您有用,您还可以对 bean 类使用属性占位符语法:

    <bean id="sample" class="${batch.classname}/>
    

    【讨论】:

    • 我考虑过这样做,但接下来的问题是为它提供批处理/延迟 bean 类的参数。 IE。在源 bean 中,我可以有 ,其中 beanName 将被解析为我想要使用的样本,例如“二郎”。然后有一个 bean 我可以在其中提供该 bean 的 k 值在我的属性文件中也是如此。
    • 查看转换器。唯一的问题是我目前使用的是 Spring 2.5。与 flex 和 blazeds。我厌倦了打破东西,因为它几乎不是一个简单的更换罐子的案例......
    • @babyangel86:机制与 Spring 2.5.6 不同,但仍然有效:static.springsource.org/spring/docs/2.5.6/reference/…
    【解决方案2】:

    当您想要覆盖您无法控制其组装的特定 bean 的属性时,请查看 PropertyOverrideConfigurer。

    【讨论】:

      【解决方案3】:

      最后使用 Castor 将 XML 映射到 java 对象更有意义。

      Castor 与 spring 集成,因此可以从 Castor 编组器中实例化 bean。

      感谢所有提示和提示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-28
        • 2014-02-08
        • 2013-06-06
        • 2011-08-26
        • 1970-01-01
        • 2013-06-28
        相关资源
        最近更新 更多