Проверяет понимание механизмов разрешения конфликтов внедрения зависимостей в Spring при наличии нескольких бинов одного типа.
Когда Spring контейнер обнаруживает несколько бинов одного типа, предназначенных для внедрения в одно и то же поле или конструктор, возникает конфликт. Контейнер не может определить, какой именно бин использовать, и выбрасывает исключение NoUniqueBeanDefinitionException. Это типичная ситуация при работе с интерфейсами, имеющими несколько реализаций.
List или Map и выбрать нужный программно.public interface PaymentService {
void pay(double amount);
}
@Component
@Primary
public class CreditCardPayment implements PaymentService {
public void pay(double amount) {
System.out.println("Оплата картой: " + amount);
}
}
@Component
@Qualifier("paypal")
public class PayPalPayment implements PaymentService {
public void pay(double amount) {
System.out.println("Оплата PayPal: " + amount);
}
}
@Component
public class OrderService {
@Autowired
@Qualifier("paypal")
private PaymentService paymentService;
// или @Resource(name = "paypalPayment")
}Используйте @Primary для задания бина по умолчанию, а @Qualifier для точного выбора конкретной реализации. Это делает код гибким и позволяет легко переключаться между разными реализациями без изменения логики.