Ответ
@Qualifier используется для устранения неоднозначности (ambiguity) при внедрении зависимостей, когда в контексте Spring существует несколько бинов, подходящих под требуемый тип.
Основной сценарий: несколько реализаций одного интерфейса.
// 1. Определяем несколько бинов одного типа (MyService)
@Component
@Qualifier("emailService")
public class EmailService implements MyService { /* ... */ }
@Component
@Qualifier("smsService")
public class SmsService implements MyService { /* ... */ }
// 2. Внедряем конкретный бин с помощью @Qualifier
@Service
public class NotificationClient {
private final MyService service;
@Autowired
public NotificationClient(@Qualifier("smsService") MyService service) {
this.service = service; // Будет внедрен SmsService
}
}
Ключевые моменты:
- @Primary задает бин по умолчанию, а @Qualifier позволяет явно выбрать конкретный.
- Может использоваться совместно с @Autowired на полях, сеттерах и конструкторах.
- Позволяет выбирать конкретные бины при инъекции коллекций (
List<MyService>), если это необходимо.