【问题标题】:Spring <constructor-arg> element must specify a ref or valueSpring <constructor-arg> 元素必须指定一个 ref 或 value
【发布时间】:2013-06-20 01:28:44
【问题描述】:

我在使用 Spring 和构造函数注入时遇到问题。我想动态创建具有名称 (String) 和特殊 ID (long) 的对象。

但是当spring.xml文件加载的时候出现异常。

线程“主”java.lang.ExceptionInInitializerError 中的异常

原因:org.springframework.beans.factory.UnsatisfiedDependencyException:创建类路径资源[spring.xml]中定义的名称为“someBean”的bean时出错:通过构造函数参数表示的不满足的依赖关系,索引为0,类型为[long]:不明确的构造函数参数类型 - 您是否将正确的 bean 引用指定为构造函数参数?

我的 spring.xml:

    <bean id="someBean" class="someClass" >
        <constructor-arg index="0" type="java.lang.String" value=""/>       
        <constructor-arg index="1" type="long" value=""/>
    </bean>
</beans>

那有什么问题呢?构造函数参数的索引为 1(而不是 0,正如异常所说)

【问题讨论】:

  • 你试过type="java.lang.Long"吗?
  • 是的,我也试过了。我也删除了索引。但没有改进
  • 你还应该分享你的构造函数的真实样子

标签: java spring constructor-injection


【解决方案1】:

在构造函数参数中,您可以使用基本类型long 和值0,或包装类型java.lang.Long 和空值。此外,为了控制一切,我会将第二个参数的值显式设置为 0。

【讨论】:

  • 好的,我从 value="" 切换到 value="0"。但问题依然存在
  • 能否将someClass的构造函数代码添加到您的帖子中?您确定以正确的顺序传递参数吗?
  • 嗯,这很尴尬.. 构造函数就像 (id, name) 我调用了 (name, id)。
猜你喜欢
  • 2013-06-03
  • 2015-05-16
  • 1970-01-01
  • 2019-11-28
  • 2020-02-27
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
相关资源
最近更新 更多