Ответ
Аннотация @Qualifier используется вместе с @Autowired для устранения неоднозначности (ambiguity) при внедрении зависимостей, когда в контексте Spring существует несколько бинов, подходящих по типу.
Проблема: Без @Qualifier Spring выбросит NoUniqueBeanDefinitionException.
@Component
class EmailService implements NotificationService { /* ... */ }
@Component
class SmsService implements NotificationService { /* ... */ }
@Service
class ClientService {
@Autowired // ОШИБКА: два бина типа NotificationService
private NotificationService service;
}
Решение с @Qualifier:
- Помечаем кандидатов квалификатором.
- Указываем тот же квалификатор при инжекции.
@Component @Qualifier("email") class EmailService implements NotificationService { /* ... */ }
@Component @Qualifier("sms") class SmsService implements NotificationService { / ... / }
@Service class ClientService { @Autowired @Qualifier("email") // Явно указываем, какой бин внедрить private NotificationService service; }
**Альтернативы:** Использование `@Primary` для бина по умолчанию или инжекция по имени поля (если имя совпадает с именем бина).