Вопрос проверяет понимание механизмов разрешения конфликтов бинов в Spring-контейнере при наличии нескольких кандидатов одного типа.
В Spring-приложении часто возникает ситуация, когда интерфейс или абстрактный класс имеет несколько реализаций, зарегистрированных как бины. При внедрении зависимости Spring не может автоматически выбрать нужный бин, что приводит к ошибке.
@Component("smsService")
public class SmsNotification implements Notification {
public void send(String message) { /* ... */ }
}
@Component("emailService")
@Primary
public class EmailNotification implements Notification {
public void send(String message) { /* ... */ }
}
@Service
public class NotificationService {
@Autowired
@Qualifier("smsService")
private Notification notification;
}В примере выше, если убрать @Qualifier, будет использован EmailNotification, так как он помечен @Primary.
Используйте @Primary для задания бина по умолчанию, а @Qualifier для точного выбора, когда нужно явно указать реализацию. Это делает код гибким и понятным при работе с несколькими реализациями одного интерфейса.