Sobes.tech
Middle
25

Егер интерфейс екі жүзеге асырумен және бұл интерфейсті енгізетін бином болса, Spring контексті көтеріліп немесе түсіп кетеді ме?

Сұралған компаниялар
Позитив Технолоджис

AI-дан жауап

sobes.tech 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
    }
}