#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
) .