Sobes.tech
Назад к вопросам
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 — позволяет точно указать нужный бин.