使用 java.io.File 类型创建 Bean 时出错 [构造函数参数类型不明确]

2022-09-03 10:10:38

我有以下弹簧豆配置

  <bean id="fileBean" class="java.io.File">
    <constructor-arg type="java.lang.String" 
                     value="$prop{file.path.property}" />    
  </bean>

我收到以下错误

org.springframework.beans.factory.UnsatisfiedDependencyException: 
Error creating bean with name 'fileBean' defined in class path resource [context.xml]:  
Unsatisfied dependency expressed through constructor argument with index 0 of type
[java.net.URI]: Ambiguous constructor argument types - did you specify the correct 
bean references as constructor arguments?

java.io.File只有一个带有单个字符串参数的构造函数,所以我不确定为什么这是模棱两可的。任何帮助赞赏。


答案 1

找到这个链接,解释发生了什么。事实证明,如果没有指定参数索引,spring将按类型匹配参数。在这种情况下,spring采用我的单个字符串参数并将其传递给java.io.File构造函数,该构造函数采用两个字符串。这可以通过指定构造函数-arg 索引来修复。

<bean id="fileBean" class="java.io.File">
  <constructor-arg index="0"
                   type="java.lang.String" 
                   value="$prop{file.path.property}" />    
</bean>

答案 2

只是我在这里的两分钱:我今天遇到了完全相同的问题。我有一个单元测试来检查Spring是否可以读取我的XML配置并生成所有必要的bean。它失败了,因为我编辑了错误的XML文件。我正在编辑来自 Ant 构建的“dist”版本,而不是来自源代码管理的正确版本。

经验教训:非常仔细地阅读那些Spring异常消息(带有XML文件路径)!