Sobes.tech
Назад к вопросам
Senior
4

Как Spring решает конфликт при наличии двух бинов одного типа? Как инжектировать зависимости?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Если в Spring-контейнере определено несколько бинов одного типа, при попытке автосвязывания по типу возникает конфликт, так как Spring не может однозначно выбрать нужный бин.

Как решить конфликт:

  1. Использовать аннотацию @Qualifier — явно указать имя бина, который нужно внедрить.
@Autowired
@Qualifier("beanName")
private MyService myService;
  1. Использовать имя поля или параметра метода, совпадающее с именем бина — Spring попытается сопоставить по имени.

  2. Аннотация @Primary — пометить один из бинов как основной, тогда он будет внедряться по умолчанию.

@Bean
@Primary
public MyService myPrimaryService() {
    return new MyServiceImpl1();
}

@Bean
public MyService mySecondaryService() {
    return new MyServiceImpl2();
}
  1. Внедрять коллекцию бинов — если нужно работать со всеми реализациями:
@Autowired
private List<MyService> services;

Таким образом, для инжектирования зависимости при конфликте нужно либо указать конкретный бин через @Qualifier, либо использовать @Primary, либо внедрять коллекцию бинов.