Sobes.tech
Middle

Spring bağlamı, iki uygulamaya sahip bir arayüz ve bu arayüzün belirli olmadan enjekte edildiği bir bean varsa, yukarı mı kalkar yoksa aşağı mı iner?

sobes.tech yapay zeka

AI'dan gelen yanıt

Если в 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
    }
}