Java Spring:使模型可供控制器使用的正确方法?
给定以下控制器Java Spring:使模型可供控制器使用的正确方法?,java,spring,model,spring-mvc,controller,Java,Spring,Model,Spring Mvc,Controller,给定以下控制器 @Controller public class MyController { ... @RequestMapping("/data") public @RequestBody Data getData(@RequestParam String id) { return myCustomModel.queryForData(id); } } 正确的配置方法是什么,以便MyController可以使用myCustomM
@Controller
public class MyController
{
...
@RequestMapping("/data")
public @RequestBody Data getData(@RequestParam String id)
{
return myCustomModel.queryForData(id);
}
}
正确的配置方法是什么,以便MyController可以使用
myCustomModel
(查询数据的内容)?我在自动布线方面看到过这种幻想,我也想这样做。您的控制器永远不应该直接调用DAO层(很简单,如果您想做一些事务,您的控制器层不支持它)。您必须注入一个服务(@service)并从中调用一个服务方法,该服务方法可以在事务作用域中内部调用一个或多个DAO方法,并返回最终模式供您发送到视图。您的控制器不应直接调用DAO层(原因很简单,如果你想做一些事务,你的控制器层不支持它)。你必须注入一个服务(@service)并从中调用一个服务方法,该方法可以在内部调用事务作用域中的一个或多个DAO方法,并返回最终模式供您发送到视图。对于生产代码,明智的做法是显式声明依赖项,而不是使用autowire,这样生产设置中的移动部件就更少了。
这类似于只使用完全限定的导入语句而不是import my.super.project.dao.*
(顺便说一下,自动布线是集成测试的一个非常有用的功能)
所以,为了在生产中实现连接,一个好方法就是将普通的构造函数依赖注入到最终字段中。尽可能使用最终字段
服务类,通过注入接收DAO:
public class CompanyService implements ICompanyService {
private final EmployeeDao employeeDao;
private final DepartmentDao departmentDao;
public CompanyService(EmployeeDao employeeDao, DepartmentDao departmentDao) {
this.employeeDao = employeeDao;
this.departmentDao = departmentDao;
}
...
}
然后控制器通过注入(使用接口类型)接收服务:
对于生产代码,明智的做法是显式声明依赖项,而不是使用autowire,这样生产设置中的移动部件就更少了。
这类似于只使用完全限定的导入语句而不是import my.super.project.dao.*
(顺便说一下,自动布线是集成测试的一个非常有用的功能)
所以,为了在生产中实现连接,一个好方法就是将普通的构造函数依赖注入到最终字段中。尽可能使用最终字段
服务类,通过注入接收DAO:
public class CompanyService implements ICompanyService {
private final EmployeeDao employeeDao;
private final DepartmentDao departmentDao;
public CompanyService(EmployeeDao employeeDao, DepartmentDao departmentDao) {
this.employeeDao = employeeDao;
this.departmentDao = departmentDao;
}
...
}
然后控制器通过注入(使用接口类型)接收服务:
什么是myCustomModel
?bean?@skaffman:
它是一个数据源。你能描述一下你希望它如何工作吗?试着把代码示例修改成更接近编译的东西。什么是myCustomModel
?bean?@skaffman:
它是一个数据源。你能描述一下你希望它如何工作吗?试着修改代码sample更接近于编译。