Middle
Spring კონტექსტი აიწევს თუ დაეცემა, თუ არსებობს ინტერფეისი ორი განხორციელებით და ბინი, სადაც ამ ინტერფეისს ინექციონირებს გარეშე დეტალების?
sobes.tech AI
პასუხი AI-სგან
Если в Spring-контексте есть интерфейс с двумя реализациями, и вы пытаетесь внедрить этот интерфейс без уточнения (например, без использования аннотаций @Qualifier или @Primary), то контекст не поднимется и упадёт с ошибкой NoUniqueBeanDefinitionException.
Spring не сможет однозначно определить, какой бин использовать, так как их несколько. Чтобы избежать этой ошибки, нужно:
- Использовать @Primary на одном из бинов, чтобы сделать его предпочтительным.
- Использовать @Qualifier с указанием имени конкретного бина при внедрении.
Пример:
@Component
@Primary
public class ImplA implements MyInterface {}
@Component
public class ImplB implements MyInterface {}
@Component
public class MyService {
private final MyInterface myInterface;
public MyService(MyInterface myInterface) {
this.myInterface = myInterface; // внедрится ImplA, т.к. @Primary
}
}