Spring: Конфликт бинов одного класса. Как решить?
Ответ от нейросети
sobes.tech AI
Если в Spring-контейнере объявлено несколько бинов одного класса, возникает конфликт при автосвязывании (autowiring), так как Spring не может однозначно определить, какой бин использовать.
Способы решения:
-
Использовать аннотацию
@QualifierПри внедрении зависимости явно указывайте имя нужного бина:
@Autowired @Qualifier("beanName") private MyClass myClass; -
Назначить уникальные имена бинам
При объявлении бина через
@Beanили@Componentможно указать имя:@Component("beanName") public class MyClass { ... } -
Использовать
@PrimaryПометить один из бинов как основной, чтобы Spring выбирал его по умолчанию:
@Bean @Primary public MyClass primaryBean() { ... } -
Внедрять коллекцию бинов
Если нужно работать со всеми бинами данного типа:
@Autowired private List<MyClass> myClasses; -
Использовать явное конфигурирование
В конфигурационных классах можно явно создавать и называть бины.
Таким образом, конфликт решается либо уточнением, какой именно бин использовать, либо организацией кода так, чтобы Spring мог однозначно выбрать нужный бин.