Sobes.tech
Senior
84

Πώς επιλύει το Spring μια σύγκρουση όταν υπάρχουν δύο beans του ίδιου τύπου; Πώς εγχύει τις εξαρτήσεις;

Εταιρείες όπου ρωτήθηκαν
СБЕРСБЕР

Απάντηση από 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, либо внедрять коллекцию бинов.