Sobes.tech
Back to questions
Junior — Middle
53

Какой паттерн используется для внедрения конкретной реализации в контексте аннотации @Qualifier?

Answer from AI

sobes.tech AI

Аннотация @Qualifier в Spring используется для выбора конкретной реализации интерфейса или бина, когда в контексте есть несколько кандидатов. Это пример применения паттерна Dependency Injection (внедрение зависимостей) вместе с паттерном Strategy.

Паттерн Strategy позволяет определить семейство алгоритмов или реализаций, инкапсулировать каждую из них и делать их взаимозаменяемыми. В случае с @Qualifier мы явно указываем, какую именно реализацию нужно внедрить, что соответствует выбору конкретной стратегии.

Пример:

public interface PaymentService {
    void pay();
}

@Service
@Qualifier("creditCard")
public class CreditCardPaymentService implements PaymentService {
    public void pay() { /* реализация оплаты картой */ }
}

@Service
@Qualifier("paypal")
public class PaypalPaymentService implements PaymentService {
    public void pay() { /* реализация оплаты через PayPal */ }
}

@Component
public class OrderProcessor {
    private final PaymentService paymentService;

    public OrderProcessor(@Qualifier("paypal") PaymentService paymentService) {
        this.paymentService = paymentService;
    }

    public void process() {
        paymentService.pay();
    }
}

Здесь @Qualifier помогает выбрать конкретную стратегию оплаты из нескольких реализаций.