2010-08-23 47 views
1

考慮下面的控制器,春季:將模型提供給控制器的正確方法?

@Controller 
public class MyController 
{ 
    ... 

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

什麼是配置它,這樣myCustomModel(東西中查詢Data)可用於在myController的正確方法?我已經看到了這種自動裝配的幻想,我也想這樣做。

+0

什麼是'myCustomModel'?豆子? – skaffman 2010-08-23 18:57:05

+0

'@skaffman:'這是一個數據源。 – 2010-08-23 18:59:10

+0

你能描述一下你想如何工作嗎?嘗試將代碼示例更改爲更接近編譯的內容。 – skaffman 2010-08-23 19:58:43

回答

0

你的控制器不應該直接調用DAO層(如果你想做一些事務,你的Controller層不支持它)是簡單的原因。你必須注入一個服務(@Service)並從中調用一個服務方法,它可以在事務範圍內調用一個或多個DAO方法,並返回最終模式以發送給視圖。

1

對於生產代碼,謹慎地聲明依賴關係而不是使用自動裝配,以便生產設置中的移動部件更少。 這類似於(順便說一下自動裝配集成測試一個非常有用的功能)只使用完全合格的import語句代替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); 
    } 
}