Ошибка при создании bean с типом java.io.File [Неоднозначные типы аргументов конструктора]

У меня есть следующая конфигурация spring bean

  <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 с одним параметром String, поэтому я не уверен, почему это неоднозначно. Любая помощь была оценена.

Ответы

Ответ 1

Нашел эту ссылку, которая объясняет, что происходит. Оказывается, что spring будет соответствовать аргументам по типу, если не указан указатель аргументов. В этом случае spring принимает мой единственный аргумент String и передает его в конструктор java.io.File, который принимает строки TWO​​strong > . Это можно исправить, указав индекс конструктора-arg.

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

Ответ 2

Только мои два цента здесь: сегодня у меня была такая же проблема. У меня есть unit test, чтобы проверить, может ли Spring прочитать мою конфигурацию XML и сгенерировать все необходимые beans. Это было неудачно, потому что я редактировал неправильный файл XML. Я редактировал версию "dist" из сборки Ant вместо правильной версии из исходного элемента управления.

Извлеченный урок: очень внимательно прочитайте те сообщения об исключениях Spring (с файлами XML файлов)!