Ответ
Spring выбросит исключение NoUniqueBeanDefinitionException при попытке инжекции по типу (например, через @Autowired), так как контейнер не сможет однозначно определить, какой бин использовать.
Способы разрешения неоднозначности:
-
Аннотация
@Primary— помечает один бин как предпочтительный.@Configuration public class AppConfig { @Bean @Primary // Этот бин будет выбран по умолчанию public MyService primaryService() { return new PrimaryServiceImpl(); } @Bean public MyService secondaryService() { return new SecondaryServiceImpl(); } } -
Аннотация
@Qualifier— явное указание имени конкретного бина.@Component public class ClientComponent { @Autowired @Qualifier("secondaryService") // Указываем конкретное имя бина private MyService service; } -
Совпадение имени поля с именем бина (работает в некоторых случаях, но ненадежно).
@Autowired private MyService secondaryService; // Может инжектиться бин с именем "secondaryService" -
Инжекция всех бинов этого типа в коллекцию.
@Autowired private List<MyService> allServices; // Инжектит оба бина
Рекомендация: Используйте @Qualifier для явного и понятного выбора нужной реализации.