Ответ
В Spring есть несколько способов разрешения неоднозначности при внедрении бинов с одним интерфейсом:
- @Qualifier - явное указание имени бина:
@Autowired
@Qualifier("firstService")
private MyService myService;
- @Primary - пометить один бин как основной:
@Bean
@Primary
public MyService firstService() {
return new FirstServiceImpl();
}
- Имя поля/параметра - Spring сопоставляет по имени:
@Autowired
private MyService firstService; // найдет бин с именем firstService
- @Resource (JSR-250) - внедрение по имени:
@Resource(name="secondService")
private MyService myService;
- Лямбда-выражение (в конфигурации):
@Bean
public SomeComponent component(Provider<MyService> provider) {
return new SomeComponent(provider.get("secondService"));
}