Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring:使模型可供控制器使用的正确方法?_Java_Spring_Model_Spring Mvc_Controller - Fatal编程技术网

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更接近于编译。