SpringMVC04所有注解按照使用位置劃分| 按照使用層級劃分(業務層、視圖層、控制層)

目錄

一、所有注解按照使用位置劃分(類、方法、參數)

1. 類級別注解

2. 方法級別注解

3. 參數級別注解

4. 字段/返回值注解

二、按照使用層級劃分(業務層、視圖層、控制層)?

1、控制層(Controller Layer)

2、業務層(Service Layer)

3、數據層(Data Layer)

4、視圖層(View Layer)

5、其他輔助注解


一、所有注解按照使用位置劃分(類、方法、參數)

1. 類級別注解

作用范圍:標記在類上,定義類的基本行為或全局配置。

注解功能說明
@Controller聲明類為控制器,處理HTTP請求,通常配合視圖解析器返回視圖名稱。
@RestController@Controller?+?@ResponseBody,用于REST API,直接返回數據(JSON/XML)。
@RequestMapping定義類的基礎請求路徑(如@RequestMapping("/api")),方法級路徑繼承此路徑。
@ControllerAdvice定義全局異常處理類,結合@ExceptionHandler處理多個控制器的異常。
@RestControllerAdvice@ControllerAdvice?+?@ResponseBody,用于REST全局異常處理。
@CrossOrigin允許類中所有方法的跨域請求(可指定來源、方法、頭信息等)。
@SessionAttributes聲明類中需要跨請求共享的模型屬性(如@SessionAttributes("user"))。
@EnableWebMvc啟用Spring MVC的默認配置(如消息轉換器、視圖解析器),通常用在配置類。
@ComponentScan配置類上指定掃描的包路徑,自動注冊組件(如控制器、服務等)。

2. 方法級別注解

作用范圍:標記在方法上,定義方法的行為或處理邏輯。

注解功能說明
@RequestMapping定義方法的請求路徑和HTTP方法(如@RequestMapping(value="/test", method=RequestMethod.GET))。
@GetMapping簡化GET請求映射(等價于@RequestMapping(method=GET))。
@PostMapping簡化POST請求映射。
@PutMapping簡化PUT請求映射。
@DeleteMapping簡化DELETE請求映射。
@PatchMapping簡化PATCH請求映射。
@ExceptionHandler在控制器或@ControllerAdvice類中定義異常處理方法。
@ResponseBody方法返回值直接寫入HTTP響應體(如返回JSON數據)。
@ResponseStatus指定HTTP響應狀態碼(如@ResponseStatus(HttpStatus.NOT_FOUND))。
@ModelAttribute標記方法,在控制器方法執行前運行,向模型添加屬性(如初始化表單對象)。
@InitBinder自定義數據綁定邏輯(如注冊屬性編輯器)。
@Async聲明方法為異步執行(需配合@EnableAsync啟用)。

3. 參數級別注解

作用范圍:標記在方法參數上,用于綁定請求數據。

注解功能說明
@RequestParam從請求參數中提取值(支持默認值和別名)。
@PathVariable從URL路徑模板中提取變量(如/user/{id}中的id)。
@RequestBody將請求體內容(如JSON)反序列化為Java對象。
@RequestHeader從請求頭中提取值。
@CookieValue從Cookie中提取值。
@ModelAttribute將請求參數綁定到模型對象(常用于表單提交)。
@Valid?/?@Validated觸發數據驗證(如JSR 303校驗)。
@SessionAttribute從會話中提取已存在的屬性值(需配合@SessionAttributes使用)。

4. 字段/返回值注解

作用范圍:標記在字段或方法返回值上。

注解功能說明
@ResponseBody可標記方法,表示返回值直接寫入響應體(與類級別@RestController等價)。
@ResponseStatus也可標記異常類,指定拋該異常時的HTTP狀態碼。

二、按照使用層級劃分(業務層、視圖層、控制層)?

1、控制層(Controller Layer)

核心注解:處理 HTTP 請求和響應,定義路由和請求映射

注解作用說明
@Controller標記類為控制器,處理 HTTP 請求,通常與視圖技術(如 JSP、Thymeleaf)結合使用
@RestController@Controller?+?@ResponseBody?的組合,用于 RESTful API(直接返回數據)
@RequestMapping通用請求映射(可指定?methodpath?等參數)
@GetMapping簡化?GET?請求映射 (@RequestMapping(method = RequestMethod.GET))
@PostMapping簡化?POST?請求映射
@PutMapping簡化?PUT?請求映射
@DeleteMapping簡化?DELETE?請求映射
@PatchMapping簡化?PATCH?請求映射
@PathVariable從 URI 路徑中提取參數(如?/users/{id}
@RequestParam從 URL 查詢參數中提取值(如??name=John
@RequestBody將 HTTP 請求體(如 JSON)綁定到方法參數對象
@ResponseBody將方法返回值直接寫入 HTTP 響應體(不經過視圖解析器)
@ExceptionHandler在控制器內定義異常處理方法
@CrossOrigin配置跨域請求支持(CORS)
@InitBinder自定義請求參數綁定規則

2、業務層(Service Layer)

核心注解:實現業務邏輯(由 Spring Core 管理)

注解作用說明
@Service標記類為業務邏輯組件(Service 層)
@Transactional聲明事務管理(通常加在 Service 層方法上)

3、數據層(Data Layer)

核心注解:數據訪問和持久化(由 Spring Data/JPA 管理)

注解作用說明
@Repository標記類為數據訪問組件(DAO 層)
@Entity標記 JPA 實體類
@Table指定實體類對應的數據庫表
@Id標記實體類的主鍵字段
@GeneratedValue配置主鍵生成策略
@Column配置實體類字段與數據庫列的映射

4、視圖層(View Layer)

核心注解:處理視圖渲染和數據展示

注解作用說明
@ModelAttribute1. 將方法返回值添加到模型(用于視圖渲染)
2. 從模型綁定數據到方法參數
@SessionAttributes聲明控制器使用的會話屬性(跨請求共享數據)
@CookieValue從 HTTP Cookie 中提取值
@RequestHeader從 HTTP 請求頭中提取值

5、其他輔助注解

注解作用說明
@Component通用組件標記(非 MVC 層,由 Spring Core 管理)
@Configuration標記配置類(定義 Bean)
@Bean聲明方法返回的對象由 Spring 容器管理
@Autowired自動注入依賴(按類型)
@Qualifier按名稱指定注入的 Bean
@Profile指定配置或 Bean 生效的環境
@Value注入配置文件中的屬性值(如?@Value("${app.name}")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906417.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906417.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906417.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

std::chrono類的簡單使用實例及分析

author: hjjdebug date: 2025年 05月 20日 星期二 14:36:17 CST descrip: std::chrono類的簡單使用實例及分析 文章目錄 1.實例代碼:2. 代碼分析:2.1 auto t1 std::chrono::high_resolution_clock::now();2.1.1 什么是 system_clock2.1.2 什么是 chrono::time_point?2.1.3 什…

電子電路仿真實驗教學平臺重磅上線!——深圳航天科技創新研究院傾力打造,助力高校教學數字化轉型

在傳統電子電路課堂中,實驗室的燈光總與高昂的成本、擁擠的設備、反復的耗材損耗相伴,而教師不得不面對這樣的現實:有限的硬件資源束縛著教學深度,不可逆的實驗風險制約著創新探索,固化的時空場景阻礙著個性化學習。當…

面試真題 - 高并發場景下Nginx如何優化

Nginx是一款高性能的Web服務器和反向代理服務器,以其輕量級、高并發處理能力和穩定性聞名。在面對高并發場景時,合理的配置與優化策略至關重要,以確保服務的穩定性和響應速度。 以下是針對Nginx進行高并發優化的一些關鍵配置和策略&#xff…

算法與數據結構:質數、互質判定和裴蜀定理

文章目錄 質數質數判定質數篩選質因數分解互質判定裴蜀定理 質數 首先回顧「質數」的定義:若一個正整數無法被除了 1 ?和它自身之外的任何自然數整除,則稱該數為質數(或素數),否則稱該正整數為合數。 根據上述定義&…

代碼隨想錄算法訓練營第60期第四十二天打卡

大家好,今天還是繼續我們的動態規劃里面的背包問題,前面我們主要接觸的是0-1背包和完全背包,其實這兩個背包問題主要就是看看每一件物品我們是否有多件,如果每一件物品我們只能取一次的話那這樣我們就是0-1背包,如果每…

第41天-Python+Qt四屏播放器開發指南

一、技術選型與工具準備 核心庫: Pyqt5:Python標準GUI庫,構建用戶界面 os / sys:文件系統操作 開發環境: pip install pyqt5 最終效果與運行 import sys from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout # 添加缺失的布局管理器 from PyQt5.QtCore impor…

upload-labs通關筆記-第12關 文件上傳之白名單GET法

目錄 一、白名單過濾 二、%00截斷 1、%00截斷原理 2、空字符 3、截斷條件 &#xff08;1&#xff09;PHP版本 < 5.3.4 &#xff08;2&#xff09;magic_quotes_gpc配置為Off &#xff08;3&#xff09;代碼邏輯存在缺陷 三、源碼分析 1、代碼審計 &#xff08;1&…

Node.js數據抓取技術實戰示例

Node.js常用的庫有哪些呢&#xff1f;比如axios或者node-fetch用來發送HTTP請求&#xff0c;cheerio用來解析HTML&#xff0c;如果是動態網頁的話可能需要puppeteer這樣的無頭瀏覽器。這些工具的組合應該能滿足大部分需求。 然后&#xff0c;可能遇到的難點在哪里&#xff1f;…

數據結構(3)線性表-鏈表-單鏈表

我們學習過順序表時&#xff0c;一旦對頭部或中間的數據進行處理&#xff0c;由于物理結構的連續性&#xff0c;為了不覆蓋&#xff0c;都得移&#xff0c;就導致時間復雜度為O&#xff08;n&#xff09;&#xff0c;還有一個潛在的問題就是擴容&#xff0c;假如我們擴容前是10…

【Unity】DOTween的常用函數解釋

DOTween插件常用函數解釋 1.DOTween.To&#xff08;通用變化動畫&#xff09; 解釋&#xff1a;將某一個值在一定的時間內變化到另一個值&#xff08;通用的函數&#xff09;&#xff0c;可用于大部分的動畫變化 使用示例&#xff1a; using UnityEngine; using DG.Tweenin…

數據結構測試模擬題(1)

1、約瑟夫問題 #include<bits/stdc.h> using namespace std; const int N25; int e[N],ne[N],head-1,idx1; int n,m; void add_to_head(int x){e[idx]x;ne[idx]head;headidx; } void add(int k,int x){e[idx]x;ne[idx]ne[k];ne[k]idx; } int main(){cin>>n>>…

Helm配置之為特定Deployment配置特定Docker倉庫(覆蓋全局配置)

文章目錄 Helm配置之為特定Deployment配置特定Docker倉庫(覆蓋全局配置)需求方法1:使用Helm覆蓋值方法2: 在Lens中臨時修改Deployment配置步驟 1: 創建 Docker Registry Secret步驟 2: 在 Deployment 中引用 Secret參考資料Helm配置之為特定Deployment配置特定Docker倉庫(覆…

BERT 作為Transformer的Encoder 為什么采用可學習的位置編碼

摘要 BERT 在位置編碼上與原始 Transformer 論文中的 sin/cos 公式不同&#xff0c;選擇了可學習&#xff08;learned&#xff09;的位置嵌入方案。本文將從 Transformer 原始位置編碼選項入手&#xff0c;分析 BERT 選擇 learned positional embeddings 的四大核心原因&#x…

【Linux 學習計劃】-- gcc、g++、動靜態庫鏈接

目錄 什么是gcc、g gcc、g 相關操作詳解 預處理、編譯、匯編、鏈接來源 動靜態鏈接是什么 結語 什么是gcc、g gcc、g其實就是編譯器&#xff0c;是幫助我們從.c或者.cc&#xff0c;.cpp文件編譯成可執行程序的 其中&#xff0c;我們如果要編譯c語言文件的話&#xff0c;…

前端讀取本地項目中 public/a.xlsx 文件中的數據 vue3

前端讀取本地項目中 public/a.xlsx 文件中的數據 vue3 項目中需要在 Vue3 項目中讀取 public/a.xlsx 文件&#xff0c;可以使用 fetch API 來獲取文件內容 一、安裝 xlsx 首先&#xff0c;你需要安裝 xlsx 庫&#xff1a; npm install xlsx二、在需要用的頁面里引入xlsx im…

MySQL:to many connections連接數過多

當你遇到 MySQL: Too many connections 錯誤時&#xff0c;意味著當前連接數已達到 MySQL 配置的最大限制。這通常是由于并發連接過多或連接未正確關閉導致的。 一、查看當前連接數 查看 MySQL 當前允許的最大連接數 SHOW VARIABLES LIKE max_connections;查看當前使用的最大…

2024年熱門AI趨勢及回顧

人工智能的崛起 2024 年可能會被銘記為人工智能不再是一種技術新奇事物&#xff0c;而是成為現實的一年。微軟、Salesforce 和 Intuit 等巨頭將人工智能融入主流企業解決方案&#xff1b;從文案寫作到數據分析&#xff0c;專門的人工智能應用程序和服務如雨后春筍般涌現&#…

LangFlow技術深度解析:可視化編排LangChain應用的新范式 -(2)流編輯器系統

Flow Editor System | langflow-ai/langflow | DeepWiki 流編輯器系統 相關源文件 流編輯器系統是 Langflow 的核心交互式組件&#xff0c;允許用戶直觀地創建、編輯和管理 LLM 驅動的應用程序。它提供了一個直觀的畫布&#xff0c;用戶可以在其中添加節點、將其與邊緣連接并…

驅動-定時-秒-字符設備

文章目錄 目的相關資料參考實驗驅動程序-timer_dev.c編譯文件-Makefile測試程序-timer.c分析 加載驅動-運行測試程序總結 目的 通過定時器timer_list、字符設備、規避競爭關系-原子操作&#xff0c;綜合運用 實現一個程序&#xff0c;加深之前知識的理解。 實現字符設備驅動框…

[Java實戰]Spring Boot整合Kafka:高吞吐量消息系統實戰(二十七)

[Java實戰]Spring Boot整合Kafka&#xff1a;高吞吐量消息系統實戰&#xff08;二十七&#xff09; 一、引言 Apache Kafka作為一款高吞吐量、低延遲的分布式消息隊列系統&#xff0c;廣泛應用于實時數據處理、日志收集和事件驅動架構。結合Spring Boot的自動化配置能力&…