首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring 2.5 MVC 新特性:註解驅動的 @MVC 程式設計模型

     編輯:Java 相關知識

從 XML 到註解的演進

Spring 2.5 引入完整註解體系,替代龐大 XML 配置。@Controller、@Autowired 搭配 <context:component-scan> 即可自動發現組件與注入依賴,大幅精簡 Web 層配置。

@MVC 核心突破:重新定義 Controller

傳統 Controller 介面強制單一方法簽名 handleRequest(req, res)。@MVC 帶來三大變革:

  1. 無需實現介面或繼承基類,POJO 即可成為 Controller。
  2. 單一類支援多個請求處理方法。
  3. 方法簽名高度靈活:參數可為 HttpServletRequest、Map、@RequestParam 等;返回值可為 ModelAndView、String、void 等。

關鍵註解深度解析

@RequestMapping:靈活的 URL 映射

@Controller
@RequestMapping("/accounts/*")
public class AccountsController {
    @Autowired
    public AccountsController(AccountRepository repo) { ... }

    @RequestMapping(method = RequestMethod.GET)
    public void show(@RequestParam("number") String number, Map<String, Object> model) {
        model.put("account", repo.findAccount(number));
        // 視圖名由慣例解析:accounts/show
    }
}
  • 類級註解定義基礎路徑,方法級註解細化映射(HTTP 方法、參數條件等)。
  • 支援慣例優於配置:無視圖名返回時,自動根據請求路徑解析視圖。

@RequestParam:參數提取與類型轉換

@RequestParam(value="number", required=false) String number
@RequestParam("id") Long id
@RequestParam("balance") double balance

自動處理類型轉換、必填/選填驗證,支援自定義 PropertyEditor。

表單處理三大註解

  • @ModelAttribute:綁定表單模型物件,可作方法參數或方法級預備數據(類似 formBackingObject)。
  • @SessionAttributes:指定跨請求保存於 Session 的模型屬性,配合 SessionStatus.setComplete() 清理。
  • @InitBinder:自定義數據綁定規則(必填欄位、PropertyEditor 註冊)。

驗證與錯誤處理

@RequestMapping(method = RequestMethod.POST)
public ModelAndView onSubmit(Account account, BindingResult result) {
    validator.validate(account, result);
    if (result.hasErrors()) {
        return new ModelAndView(); // 回顯表單並攜帶錯誤
    }
    // 保存並重導向
}

BindingResult 收集綁定與驗證錯誤,配合慣例視圖解析,代碼極度精簡。

最佳實踐建議

  • 採用 ControllerClassNameHandlerMapping 移除代碼中硬編碼 URL。
  • 依賴 慣例視圖解析,消除硬編碼視圖名。
  • 善用 @ModelAttribute 方法級預備數據,簡化表單流程。

總結

Spring 2.5 @MVC 不只是 XML 替代品,更賦予 Controller 技術下一階段演進:非侵入、多方法、靈活簽名、慣例優先。強烈推薦遷移至註解驅動模型,享受精簡、強大的 Web 開發體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved