Ошибка при создании бина с типом java.io.File [Типы аргументов неоднозначного конструктора] - PullRequest
14 голосов
/ 07 сентября 2011

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

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

Ответы [ 2 ]

26 голосов
/ 07 сентября 2011

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

<bean id="fileBean" class="java.io.File">
  <constructor-arg index="0"
                   type="java.lang.String" 
                   value="$prop{file.path.property}" />    
</bean>
4 голосов
/ 19 мая 2014

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

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

...