Spring:使模型可用于控制器的正确方法是什么?

时间:2010-08-23 18:48:07

标签: java spring model spring-mvc controller

给出以下控制器,

@Controller
public class MyController 
{
    ...

    @RequestMapping("/data")
    public @RequestBody Data getData(@RequestParam String id) 
    {
        return myCustomModel.queryForData(id);
    }
}

配置它的正确方法是什么,以便MyController可以使用myCustomModel(查询Data的内容)?我已经看到了这种自动装配的好感,我也想这样做。

2 个答案:

答案 0 :(得分:1)

对于生产代码,明确声明依赖关系而不是使用autowire是明智的,因此生产设置中的移动部件较少。 这类似于仅使用完全限定的导入语句而不是import my.super.project.dao.*

的良好做法

(顺便说一下,自动装配是集成测试的一个非常有用的功能)

因此,要在生产中进行连接,一个好的方法就是将最初的构造函数依赖注入到最终字段中。尽可能使用最终字段minimizes mutability

服务类,通过注入接收daos:

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;
   }

   ...
}

然后控制器通过注入接收服务(使用接口类型):

@Controller
public class MyController 
{
    private final ICompanyService companyService;

    public MyController(ICompanyService companyService) {
      this.companyService = companyService;
    }

    @RequestMapping("/data")
    public @RequestBody Data getData(@RequestParam String id) 
    {
        return companyService.queryForData(id);
    }
}

答案 1 :(得分:0)

您的控制器永远不应该直接调用DAO层(如果您想进行某些事务,控制器层不支持它,原因很简单)。您必须注入一个服务(@Service)并从中调用一个服务方法,该方法可以在内部调用事务范围中的一个或多个DAO方法,并返回最终模式以供您发送到视图。