Ошибка при создании 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, который принимает строки TWOstrong > . Это можно исправить, указав индекс конструктора-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 файлов)!