Назад к вопросам
СБЕР
Senior
4
Как Spring решает конфликт при наличии двух бинов одного типа? Как инжектировать зависимости?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Если в Spring-контейнере определено несколько бинов одного типа, при попытке автосвязывания по типу возникает конфликт, так как Spring не может однозначно выбрать нужный бин.
Как решить конфликт:
- Использовать аннотацию
@Qualifier— явно указать имя бина, который нужно внедрить.
@Autowired
@Qualifier("beanName")
private MyService myService;
-
Использовать имя поля или параметра метода, совпадающее с именем бина — Spring попытается сопоставить по имени.
-
Аннотация
@Primary— пометить один из бинов как основной, тогда он будет внедряться по умолчанию.
@Bean
@Primary
public MyService myPrimaryService() {
return new MyServiceImpl1();
}
@Bean
public MyService mySecondaryService() {
return new MyServiceImpl2();
}
- Внедрять коллекцию бинов — если нужно работать со всеми реализациями:
@Autowired
private List<MyService> services;
Таким образом, для инжектирования зависимости при конфликте нужно либо указать конкретный бин через @Qualifier, либо использовать @Primary, либо внедрять коллекцию бинов.