Назад к вопросам
Альфа-Банк
Senior
7
Для чего нужны аннотации @Qualifier и @Primary?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Аннотации @Qualifier и @Primary в Spring используются для управления выбором бина при автосвязывании (dependency injection), когда в контексте есть несколько кандидатов одного типа.
-
@Primary— помечает бин как предпочтительный, если есть несколько бинов одного типа, и не указан@Qualifier. При автосвязывании Spring выберет бин с@Primaryпо умолчанию. -
@Qualifier— позволяет явно указать, какой бин использовать, задавая уникальное имя или значение. Это полезно, когда нужно выбрать конкретный бин из нескольких, даже если есть@Primary.
Пример:
@Component
@Primary
public class ServiceA implements MyService {
// реализация
}
@Component
@Qualifier("serviceB")
public class ServiceB implements MyService {
// другая реализация
}
@Component
public class Client {
private final MyService myService;
// Внедрится ServiceA, так как он @Primary
public Client(MyService myService) {
this.myService = myService;
}
// Или явно указать бин с помощью @Qualifier
@Autowired
public Client(@Qualifier("serviceB") MyService myService) {
this.myService = myService;
}
}
Таким образом, @Primary задает бин по умолчанию, а @Qualifier — позволяет точно указать нужный бин.