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

簡化 Spring (三):Controller 層——回歸純 POJO 實現 Controller 接口

     編輯:Java 相關知識

Struts/WebWork 等重型 MVC 框架為非本質功能引入過多複雜度。最樸素的 MVC:一個 JavaBean 實現 Controller 接口,承擔請求處理,享有 Spring IoC 注入優勢。

核心原理

Spring MVC 屬靜態配置型 Front Controller:DispatcherServlet 攔截 *.do,依 XML 映射調用 Command 的 handleRequest(request, response),同時注入依賴。我們的 Controller 就是實現此方法的普通 JavaBean。

相對 Struts/WebWork 的優勢

  • 類階層彈性:可直接實現 Controller 介面(單一方法),也可繼承 SimpleFormController 等豐富回調基類。
  • 零 Form Bean:無需 Struts 的 ActionForm 或 Tapestry 的頁面物件,極大減少類膨脹。
  • 非強制 XML:宣告式配置可選,JSP 路徑等固定資訊直接寫在 Java 代碼中,閱讀單一檔案即可理解流程。

化簡實踐

3.1 直接實現 Controller 介面

public class MyController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) {
        // 業務邏輯
        return new ModelAndView("viewName", "modelKey", modelObject);
    }
}

需訪問 ServletContext 時繼承 WebApplicationObjectSupport。

3.2 一個 Controller 管一組相關 Action

反對「一個 Controller 一個 Action」(類膨脹)。採用傳統參數分派:

public class OrderController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) {
        String action = req.getParameter("action");
        if ("list".equals(action)) return list(req);
        if ("create".equals(action)) return create(req);
        if ("update".equals(action)) return update(req);
        throw new IllegalArgumentException("Unknown action: " + action);
    }
    // 各私有處理方法...
}

RoR、Groovy on Rails、Spring MultiActionController 皆採此模式。

3.3 XML 宣告式配置取捨

只在「不重新編譯即需變更」時用 XML(如資料源、事務管理器);JSP 路徑、業務規則全寫在 Java 裡。

3.4 自製 Data Binder

Spring DataBinder 處理巢狀物件需手動實例化。偷懶改用 Jakarta BeanUtils 自動處理 order.customer.customerNo 等巢狀綁定。

3.5 提取基類

封裝 MultiAction 分派、通用輔助方法,Spring 內建 MultiActionController 參數簽名過於死板(強制前兩參數為 request/response)。

結語

經層層化簡,Controller 變成人人可讀、可維護的純 JavaBean。技術浪潮再怎麼變,這樣的代碼永遠有人能接手。

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