Sobes.tech
Senior
79

Cum rezolvă Spring un conflict atunci când există două beans de același tip? Cum injectează dependențele?

Companiile au fost întrebate
СБЕРСБЕР

Răspuns de la AI

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, либо внедрять коллекцию бинов.