Java spring-rest控制器中的实例化模型
我只需要对我的SpringWeb应用程序的一个部分进行简短的解释,但我并不完全理解 我有一个简单的mvc spring web应用程序,带有Java spring-rest控制器中的实例化模型,java,rest,spring-mvc,autowired,Java,Rest,Spring Mvc,Autowired,我只需要对我的SpringWeb应用程序的一个部分进行简短的解释,但我并不完全理解 我有一个简单的mvc spring web应用程序,带有StudentController。对于数据,我有一个类StudentDataModelStub,它实现了IStudentDataModel接口,该接口具有一些简单的函数,用于处理StudentDataModelStub类中列表中存储的数据 public class StudentDataModelStub implements IStudentDataMo
StudentController
。对于数据,我有一个类StudentDataModelStub
,它实现了IStudentDataModel
接口,该接口具有一些简单的函数,用于处理StudentDataModelStub
类中列表中存储的数据
public class StudentDataModelStub implements IStudentDataModel {
private final Map<Integer, Student> data = new HashMap<>();
@Override
public List<Student> getStudents() {
// TODO Auto-generated method stub
return new ArrayList<>(data.values());
}
@Override
public Student getStudent(int id) throws IdNotFoundException {
// TODO Auto-generated method stub
if(!data.containsKey(id)){
throw new IdNotFoundException("...");
}
return data.get(id);
}
在StudentController
课堂上,我有
@Autowired
私有IStudentDataModel模型代码>
当我删除@Autowired
注释时,我会得到预期的NullPointerException
,因为我没有实例化StudentDataModelStub
。但是spring如何知道实例化哪个类是IStudentDataModel
,因为多个类可以实现IStudentDataModel
接口,为什么model
必须是@Autowired
这是StudentDataModelStub
类的一部分
public class StudentDataModelStub implements IStudentDataModel {
private final Map<Integer, Student> data = new HashMap<>();
@Override
public List<Student> getStudents() {
// TODO Auto-generated method stub
return new ArrayList<>(data.values());
}
@Override
public Student getStudent(int id) throws IdNotFoundException {
// TODO Auto-generated method stub
if(!data.containsKey(id)){
throw new IdNotFoundException("...");
}
return data.get(id);
}
公共类StudentDataModelStub实现IStudentDataModel{
私有最终映射数据=新HashMap();
@凌驾
公众学生名单{
//TODO自动生成的方法存根
返回新的ArrayList(data.values());
}
@凌驾
公共学生getStudent(int id)抛出IdNotFoundException{
//TODO自动生成的方法存根
如果(!data.containsKey(id)){
抛出新的IdNotFoundException(“…”);
}
返回data.get(id);
}
当我删除@Autowired annotation时,我会得到NullPointerException,它
是预期的,因为我没有实例化StudentDataModelStub
spring是否知道要实例化哪个类IStudentDataModel
使用,因为多个类可以实现IStudentDataModel
接口
Spring容器扫描@Componentscan
(或
内部xml)中指定的包中的依赖项,并将它们注入bean中
现在,关于注入哪个实现,您可以从SpringDoc中找到以下文本(也可以查看)(我的重点)
@Primary是按类型使用自动布线的有效方法,其中包含多个
i可以确定一个主要候选人时的情况
需要控制选择过程,Spring的限定符
可以使用批注。您可以将限定符值与
特定参数,缩小类型匹配集,以便
为每个参数选择特定的bean
简而言之,如果为同一接口定义了多个实现,那么您需要通过指定@Primary
或@Qualifier
来告诉容器要注入哪个bean
为什么模型必须@Autowired
您的StudentDataModelStub
类实际上不是一个模型(实体)类,它实际上是在缓存学生的数据并根据id返回数据。您可以为StudentDataModelStub
添加代码吗?