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 помогает выбрать конкретную стратегию оплаты из нескольких реализаций.