Senior
78
Kako Spring rešava sukob kada postoje dva beana istog tipa? Kako injektuje zavisnosti?
Компаније где су питане
Одговор од АИ
sobes.tech АИ
Если в 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, либо внедрять коллекцию бинов.