внедрение интерфейса зависимостей Spring с двумя реализованными классами

#spring #dependency-injection

#spring #внедрение зависимостей

Вопрос:

рассмотрим сценарий внедрения интерфейса в spring, у меня есть интерфейс, который был реализован двумя классами. Если мы внедрим интерфейс в другой класс, используя @Autowired. Теперь, если мы вызовем метод в этом интерфейсе, то какой класс, реализованный методом, будет вызван? учтите, что мы не используем аннотацию @Qualifier .

 enter code here

public interface EmployeeDAOI{
 void save();
  }


public class Emp1 implements EmployeeDAOI{
  public void save(){ 
        //some logic
   }
}

public class Emp2 implements EmployeeDAOI{
 public void save(){
      //some logic
       }
}
  

теперь мы вводим EmployeeDAOI в некоторый класс

 public class IterfaceEx{
@Autowired
private EmployeeDAOI edaoi;
public void setEmployeeDAOI(EmployeeDAOI edaoi){
 this.edaoi=edaoi;
 }

edaoi.save();  // My question is here which class method will be called ?
}
  

Ответ №1:

Нет. Вы получаете исключение:

  org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [EmployeeDAOI] is defined: expected single matching bean but found 2: [emp1 , emp2]
  

Spring ожидает ровно один экземпляр, если только внедрение не выполняется для одного Collection из этих экземпляров или вы не используете способ дифференцирования ( @Qualifier ) .