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

Spring MVC 核心概念與註解實戰指南

     編輯:Java 程式設計入門

Spring 框架核心價值

Spring 透過 IOC(控制反轉) 與 DI(依賴注入) 實現元件解耦:

  • IOC:將 new 物件的權利交給容器,由 @Component、XML <bean> 定義
  • DI:容器自動將依賴注入目標類,支援建構子/Setter/欄位注入

優勢:單元測試容易、模組可替換、生命週期統一管理。

常用註解速查表

註解層級說明
@Controller控制層接收 HTTP 請求,回傳視圖名或 JSON
@RestController控制層@Controller + @ResponseBody,直接回傳資料
@Service業務層封裝業務邏輯,交易管理邊界
@Repository資料存取層DAO 元件,自動轉換 JDBC 例外為 Spring DataAccessException
@Component通用泛型元件標記,掃描自動註冊
@RequestMapping方法/類URL 映射,支援 method、params、headers、consumes、produces
@GetMapping 等方法HTTP 動詞速寫註解
@Autowired欄位/建構子ByType 自動裝配,required=false 允許為 null
@Resource欄位/SetterJSR-250,預設 ByName,指定 name 時精確匹配
@Qualifier配合 @Autowired多實現時指定 Bean 名稱
@ResponseBody方法回傳值直接寫入 HTTP Response Body(JSON/XML)
@Transactional方法/類宣告式交易,rollbackFor 指定回滾例外

MVC 請求處理流程

  1. DispatcherServlet 接收請求(Front Controller 模式)
  2. HandlerMapping 根據 URL 找到對應的 @RequestMapping 方法
  3. HandlerAdapter 執行 Controller 方法,參數綁定、型別轉換、驗證
  4. Controller 呼叫 Service → Repository → DB,封裝 Model/ModelAndView
  5. ViewResolver 解析視圖名 → 具體 View(JSP/Thymeleaf/FreeMarker/JSON)
  6. View 渲染輸出 → 回傳給瀏覽器

關鍵配置要點

<!-- web.xml 註冊 DispatcherServlet -->
<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-mvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
<!-- spring-mvc.xml 核心配置 -->
<context:component-scan base-package="com.example" />
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/views/" />
  <property name="suffix" value=".jsp" />
</bean>
<!-- 靜態資源處理 -->
<mvc:resources mapping="/static/**" location="/static/" />

進階技巧

  • 全域例外處理:@ControllerAdvice + @ExceptionHandler 統一回傳錯誤碼/訊息
  • 攔截器:實作 HandlerInterceptor,配置 mvc:interceptors 做登入驗證、日誌、限流
  • 檔案上傳:MultipartFile + CommonsMultipartResolver 或 StandardServletMultipartResolver
  • RESTful 設計:善用 HTTP 動詞、狀態碼、HATEOAS 連結

常見坑點

❌ @Transactional 加在 private 方法不生效 → 必須 public

❌ 同類內部方法互相呼叫 @Transactional 失效 → 需注入自己或用 AspectJ

❌ @Autowired 預設 required=true,找不到 Bean 啟動報錯 → 介面多實現時加 @Qualifier

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