【问题标题】:Integer.decode() in Spring application contextSpring 应用程序上下文中的 Integer.decode()
【发布时间】:2014-09-26 07:57:59
【问题描述】:

如何将整数值从属性传递给应用程序,如果该值可以以八进制/十进制/十六进制形式存储?

属性示例:

 app.size=0120

// 应该是 80(十进制)。

弹簧上下文:

<bean id="resource">
    <property name="size">
        <bean class="java.lang.Integer" factory-method="decode">
            <constructor-arg name="nm">
                <bean class="java.lang.String">
                    <constructor-arg value="${app.size}"/>
                </bean>
            </constructor-arg>
        </bean>
    </property>
</bean>

上面的不行:

org.springframework.beans.factory.BeanCreationException: 错误 创建在 ServletContext 中定义的名称为“资源”的 bean 资源[/WEB-INF/context.xml]:

在设置时无法创建 [java.lang.Integer] 类型的内部 bean 'java.lang.Integer#159c5db' bean 属性“大小”;

嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名称为“java.lang.Integer#159c5db”的 bean 时定义错误 ServletContext 资源[/WEB-INF/context.xml]:

通过构造函数参数表达的不满足的依赖关系 [java.lang.String] 类型的索引 0:不明确的工厂方法参数 类型 - 您是否将正确的 bean 引用指定为工厂方法 论据?

我知道我可以将size 作为字符串传递,然后在java 代码中传递decode()。但在我看来,在上下文中进行这种转换似乎是正确的。有可能吗?


以下适用于十进制和十六进制数字:

<bean id="resource">
    <property name="size" value="${app.size}" />
</bean>

【问题讨论】:

    标签: java spring properties refactoring


    【解决方案1】:

    感谢@Evgeniy Dorofeevanswer

    这行得通:

    <bean id="resource">
        <property name="size">
            <bean class="java.lang.Integer" factory-method="decode">
                <constructor-arg value="${app.size}" type="java.lang.String" />
            </bean>
        </property>
    </bean>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-20
      • 2019-08-13
      • 2010-09-12
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多