Я должен был сделать некоторые разработки для старого проекта, который использует Spring с аннотациями.
Я получил его из SVN (без изменений с момента последнего развертывания), сгенерировал войну, используя Gradle, как обычно, развернул ее в Tomcat с той же версией, что и раньше, и попытался запустить с той же версией Java. Все как всегда, кроме используемой версии Eclipse.
Проблема в том, что я получаю NoUniqueBeanDefinitionException
для каждого поля, которое определяет класс, расширяющий абстрактный класс. Это похоже на то, что если Spring по какой-то причине не может определить, какой класс он должен использовать, даже если он указан в сигнатуре метода:
@Autowired
@Override
protected void setEntityDao(ListboxItemDao entityDao) {...}
Где ListboxItemDao
расширяется GenericDao
И я получаю это исключение:
org.springframework.beans.factory.NoUniqueBeanDefinitionException:
No qualifying bean of type [com.section.generic.dao.GenericEntityDao] is defined:
expected single matching bean but found 32: listboxItemDao, anotherDao1, anotherDao2...
Я вижу, что могу это исправить, добавив @Qualifier("listboxItemDao")
, однако я не понимаю, почему это работало раньше без @Qualifier
. Это очень раздражает, что теперь, из-за небольшого изменения, я должен добавить это @Qualifier
ко всем службам ...
Что может быть такого, что теперь мне требуется это @Qualifier
, когда все окружение одинаково?