Spring Framework 常用注解詳解(按所屬包分類整理)

在使用 Spring Framework 進行開發時,注解(Annotation)是實現 依賴注入(DI)組件掃描AOP 切面事務管理Web 請求映射 的核心手段。Spring 提供了豐富且結構清晰的注解體系,這些注解按照功能被組織在不同的包中。

本文?按注解所屬的包(package)進行分類,詳細說明每個包的用途,并列舉該包下的常用注解及其功能。


1.?org.springframework.stereotype —— 組件聲明注解

🔹 用途說明:

該包提供了用于 聲明 Spring 管理的組件(Bean) 的注解。Spring 容器通過組件掃描(@ComponentScan)自動發現這些類,并將其注冊為 Bean 實例。這些注解主要用于類級別,實現分層架構的語義化標注。

? 常用注解:

注解

詳細說明

@Component

通用組件注解,任何被 Spring 管理的類都可以使用。它是@Service@Repository@Controller的父注解。

@Service

專用于業務邏輯層(Service 層),語義更明確,便于代碼維護和分層設計。

@Repository

專用于數據訪問層(DAO/Repository),除了注冊為 Bean 外,還能自動將數據庫異常(如 SQLException)轉換為 Spring 的DataAccessException,便于統一異常處理。

@Controller

用于 Web 層控制器,通常與@RequestMapping配合使用,處理 HTTP 請求。

@RestController

雖然實際位于org.springframework.web.bind.annotation包中,但功能上屬于此分類。它是@Controller + @ResponseBody的組合注解,用于構建 RESTful API,返回 JSON/XML 數據,無需額外標注@ResponseBody

💡 提示:使用這些注解后,需配合 @ComponentScan 啟用組件掃描,Spring 才能自動發現并注冊這些 Bean。


2.?org.springframework.beans.factory.annotation —— 依賴注入(DI)核心注解

🔹 用途說明:

該包提供了 Spring 依賴注入(DI)的核心注解,用于實現 自動裝配(Autowiring)屬性注入。它們可以作用于字段、方法、構造器等位置,是實現松耦合設計的關鍵。

? 常用注解:

注解

詳細說明

@Autowired

自動裝配 Bean,默認按類型(byType)查找并注入。可作用于字段、setter 方法、構造器等。若存在多個同類型 Bean,需配合@Qualifier使用。

@Qualifier

@Autowired配合使用,通過指定 Bean 的名稱(id)來解決類型沖突問題。例如:@Qualifier("userServiceImpl")

@Value

用于注入基本類型或字符串值,支持從配置文件(如application.properties)讀取屬性值,語法為${key};也支持 SpEL(Spring Expression Language)表達式,語法為#{expression}。例如:
@Value("${server.port}")
@Value("#{systemProperties['os.name']}")

💡 提示:@Value 是實現外部化配置(Externalized Configuration)的重要手段,常用于讀取環境變量、配置項等。


3.?org.springframework.context.annotation —— 配置與條件化注解

🔹 用途說明:

該包提供了基于 Java 的配置方式(Java Config),用于替代傳統的 XML 配置文件。它支持 配置類定義組件掃描條件化加載環境隔離 等高級功能,是構建現代化 Spring 應用的基礎。

? 常用注解:

注解

詳細說明

@Configuration

標記一個類為配置類,相當于一個 XML 配置文件。此類中通常包含@Bean方法。

@Bean

標注在方法上,表示該方法返回的對象將被注冊為 Spring 容器中的 Bean。常用于配置第三方組件(如 DataSource、RedisTemplate 等)。

@ComponentScan

啟用組件自動掃描,指定掃描的包路徑。Spring 會自動發現并注冊帶有@Component及其衍生注解的類。

@PropertySource

用于加載.properties屬性文件,通常與@Configuration一起使用。例如:
@PropertySource("classpath:app.properties")
配合@Value注入屬性值。

@Import

導入其他配置類,實現配置的模塊化管理。例如:
@Import(DatabaseConfig.class)

@Profile

指定某個 Bean 或配置類僅在特定環境下生效(如devtestprod)。例如:
@Profile("dev")
結合spring.profiles.active屬性控制環境切換。

@Scope

定義 Bean 的作用域,常見值有:
-singleton(默認,單例)
-prototype(每次獲取都創建新實例)
-requestsession(Web 環境下)

@Lazy

標記 Bean 為延遲初始化,僅在首次使用時創建,可提升應用啟動速度。

@Primary

當容器中存在多個相同類型的 Bean 時,標記該 Bean 為“首選”,避免@Autowired報錯。

💡 提示:這些注解是實現“零 XML 配置”的關鍵,尤其在 Spring Boot 中被廣泛使用。


4.?org.springframework.web.bind.annotation —— Web 與 MVC 注解

🔹 用途說明:

該包是 Spring MVC 的核心注解集合,用于處理 HTTP 請求映射參數綁定響應處理 等 Web 層功能。適用于構建傳統的 MVC 應用或 RESTful 風格的 Web 服務。

? 常用注解:

注解

詳細說明

@RequestMapping

最基礎的請求映射注解,可作用于類或方法,支持設置 URL 路徑、請求方法(GET/POST)、參數、請求頭等。

@GetMapping

快捷方式,等價于@RequestMapping(method = RequestMethod.GET),用于映射 GET 請求。

@PostMapping

映射 POST 請求,常用于表單提交或創建資源。

@PutMapping

映射 PUT 請求,用于更新資源。

@DeleteMapping

映射 DELETE 請求,用于刪除資源。

@PatchMapping

映射 PATCH 請求,用于部分更新資源。

@RequestParam

綁定請求參數(如?name=張三)到方法參數。支持設置是否必填(required)、默認值(defaultValue)。

@PathVariable

綁定 URL 路徑中的變量(如/users/{id}),常用于 RESTful 風格接口。

@RequestBody

將 HTTP 請求體(如 JSON)反序列化為 Java 對象,常用于 POST/PUT 請求體數據綁定。

@ResponseBody

將方法返回值直接寫入 HTTP 響應體(如返回 JSON),常用于 AJAX 或 REST 接口。

@RestController

組合注解,等價于@Controller + @ResponseBody,所有方法默認返回數據而非視圖名。

@RequestHeader

獲取 HTTP 請求頭信息,如User-AgentAuthorization等。

@CookieValue

獲取 Cookie 的值。

@ModelAttribute

用于綁定表單數據到對象,或在請求處理前向模型中添加屬性。

💡 提示:@RestController 是構建前后端分離項目的核心注解,推薦用于 REST API 開發。


5.?org.springframework.transaction.annotation —— 事務管理注解

🔹 用途說明:

該包提供了聲明式事務管理的支持,通過注解方式控制數據庫事務的邊界,避免手動管理 Connectioncommitrollback,提升代碼可讀性和一致性。

? 常用注解:

注解

詳細說明

@Transactional

標記方法或類需要事務管理。支持配置:
- 傳播行為(Propagation)
- 隔離級別(Isolation)
- 超時時間(timeout)
- 是否只讀(readOnly)
- 回滾規則(rollbackFor)

例如:
@Transactional(rollbackFor = Exception.class)

?? 注意:需在配置類上添加 @EnableTransactionManagement 啟用事務支持(Spring Boot 自動配置)。


6. org.aspectj.lang.annotation —— AOP 切面編程注解

🔹 用途說明:

該包來自 AspectJ 框架,Spring 借助它實現 面向切面編程(AOP),用于處理日志、權限、性能監控、事務等橫切關注點(Cross-cutting Concerns)。

? 常用注解:

注解

詳細說明

@Aspect

定義一個切面類,該類中包含通知(Advice)方法。

@Before

前置通知,在目標方法執行前執行。

@After

最終通知,無論目標方法是否拋出異常,都會執行。

@AfterReturning

返回通知,在目標方法成功執行并返回后執行。

@AfterThrowing

異常通知,在目標方法拋出異常后執行。

@Around

環繞通知,最強大的通知類型,可以控制目標方法的執行(如前置邏輯 → 執行方法 → 后置邏輯)。

@Pointcut

定義切點表達式,用于復用切點邏輯。例如:
@Pointcut("execution(* com.example.service.*.*(..))")

?? 注意:使用這些注解需引入 aspectjweaver 依賴,并啟用 AOP 支持(如 @EnableAspectJAutoProxy)。


7. 測試相關注解(Spring Boot Test 模塊)

雖然嚴格來說不屬于純 Spring Framework,但在實際開發中極為常用,特此補充。

🔹 所屬包:

  • org.springframework.boot.test.context
  • org.springframework.boot.test.autoconfigure.web.servlet
  • org.springframework.boot.test.mock.mockito

? 常用注解:

注解

詳細說明

@SpringBootTest

啟動完整的 Spring 上下文,用于集成測試。

@WebMvcTest

僅加載 Web 層(Controller),用于測試控制器邏輯。

@DataJpaTest

僅加載 JPA 相關配置,常用于 Repository 層測試,自動配置內存數據庫。

@MockBean

在測試中創建一個 Mock Bean(如 Mockito 對象),并注冊到 Spring 容器中,用于模擬依賴。

💡 提示:這些注解屬于 spring-boot-test 模塊,適用于 Spring Boot 項目。


? 總結:Spring 注解體系概覽

包名

主要功能

典型使用場景

org.springframework.stereotype

組件聲明

分層架構 Bean 標注

org.springframework.beans.factory.annotation

依賴注入

自動裝配、屬性注入

org.springframework.context.annotation

配置管理

Java Config、條件化加載

org.springframework.web.bind.annotation

Web 請求處理

MVC、REST API 開發

org.springframework.transaction.annotation

事務管理

數據庫操作一致性控制

org.aspectj.lang.annotation

AOP 切面

日志、權限、性能監控

spring-boot-test相關包

測試支持

單元測試、集成測試

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

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

相關文章

ROADS落地的架構藍圖

2 ROADS落地的架構藍圖 將ROADS體驗從理念轉化為現實,需要一套完整且自頂向下的架構藍圖作為支撐。華為的實踐表明,數字化轉型的成功依賴于多個架構層次的協同推進,而非單點技術的應用。該藍圖通常包含以下五個關鍵層次,每一層都承…

如何構建一個神經網絡?從零開始搭建你的第一個深度學習模型

在深度學習的海洋中,神經網絡就像一艘船,承載著數據的流動與特征的提取。而構建一個神經網絡,就像是在設計這艘船的結構。本文將帶你一步步了解如何使用 PyTorch 構建一個完整的神經網絡模型,涵蓋網絡層的組織、前向傳播與反向傳播…

自學嵌入式第二十三天:數據結構(3)-雙鏈表

一、strtokchar * strtok(char *s1,char *s2);截斷字符串,在s1字符串中找到s2截取前一段返回,如需要再次截取剩余段,再使用此函數s1輸入NULL即可;二、bzerobzero(char *p,size_t size);清零,從p地址開始,清零size個bit…

河南萌新聯賽2025第六場 - 鄭州大學

暑期集訓已經接近尾聲,一年六場的暑期萌新聯賽也已經結束了,進步是比較明顯的,從一開始的七八百名到三四百名,雖然拿不出手,但是這也算對兩個月的集訓的算法初學者的我一個交代。 比賽傳送門:河南萌新聯賽…

2-1.Python 編碼基礎 - 基礎運算符(算術運算符、賦值運算符、比較運算符、邏輯運算符)

一、算術運算符 1、基本介紹編號運算符說明示例輸出結果1兩數相加10 20302-兩數相減10 - 20-103*兩數相乘,或者返回一個被重復若干次的字符串10 * 202004/兩數相除10 / 200.55//兩數相除并返回商的整數部分9 // 246%兩數相除并返回余數10 % 507**冪運算10 ** 21002…

CMOS知識點 MOS管不同工作區域電容特性

知識點14:MOSFET的電容主要來源于其物理結構:柵氧層電容:柵極(G)與襯底(B)、溝道、源(S)、漏(D)之間隔著二氧化硅絕緣層,自然形成電容…

預測性維護+智能優化:RK3568+FPGA方案在儲能行業的應用

在儲能行業,RK3568FPGA方案通過預測性維護和智能優化技術,顯著提升系統可靠性和經濟性。該方案采用異構架構(FPGA處理高速信號采集,RK3568負責策略計算與通信管理),實現微秒級響應和精準控制。?26一、預測…

工業4.0時代,耐達訊自動化Profibus轉光纖如何重構HMI通信新標準?“

在智能制造與工業4.0浪潮下,HMI(人機界面)作為設備與操作員之間的“橋梁”,承擔著實時數據顯示、設備監控及交互控制的核心職能。然而,傳統Profibus總線在HMI連接中常因電磁干擾、傳輸距離限制等問題,導致畫…

SpringClound——網關、服務保護和分布式事務

一、網關網絡的關口,負責請求的路由、轉發、身份驗證server:port: 8080 spring:cloud:nacos:discovery:server-addr: 192.168.96.129:8848gateway:routes:- id: item-serviceuri: lb://item-servicepredicates:- Path/items/**,/search/**- id: user-serviceuri: lb…

【C++】模版(初階)

目錄 一. 函數模版 1. 格式 原理 2. 函數模版的實例化 二. 類模板 void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right temp; }void Swap(char&…

InfluxDB 開發工具鏈:IDE 插件與調試技巧(二)

四、利用 IDE 插件提升開發效率 4.1 代碼編寫技巧 在使用安裝了 InfluxDB 插件的 IDE 進行代碼編寫時,我們可以充分利用插件提供的代碼導航和智能提示功能,來顯著提高編寫 InfluxDB 相關代碼的效率和準確性。 以一個涉及多個 Measurement 和復雜查詢條…

定制開發開源AI智能名片S2B2C商城小程序:場景體驗新維度與四重目標達成

摘要:本文聚焦于定制開發開源AI智能名片S2B2C商城小程序,探討其在場景體驗領域的應用與價值。通過深入分析場景體驗的最高境界——深體驗、強認知、高傳播、關系深化這四個目標,闡述該小程序如何憑借自身特性與功能,在商業場景中實…

開源 GIS 服務器搭建:GeoServer 在 Linux 系統上的部署教程

GeoServer 是一個開源的地理信息服務服務器,可以發布地圖、矢量數據和柵格數據。 1. 更新系統 sudo apt update && sudo apt upgrade -y2. 安裝 Java 11 GeoServer 需要 Java 運行環境,這里用 OpenJDK 11。 sudo apt install openjdk-11-jdk…

前端面試通關:Cesium+Three+React優化+TypeScript實戰+ECharts性能方案

前端面試題詳解與更多面試題 WebGLCesiumThree 1. 自我介紹 回答要點: 教育背景和工作經驗技術棧和專長領域參與過的重點項目個人優勢和學習能力職業規劃 示例: “我是一名有前端開發經驗的工程師,熟練掌握React、Vue等主流框架&#x…

集成電路學習:什么是Object Tracking目標跟蹤

Object Tracking:目標跟蹤 Object Tracking,即目標跟蹤,是計算機視覺領域的一個重要研究方向,它專注于在視頻幀序列中連續地監測和定位一個或多個目標對象的位置。以下是對目標跟蹤技術的詳細解析: 一、定義與目的 定義: 目標跟蹤是指在視頻序列中,通過特定的算法…

深入理解計算機系統

參考書籍 8-18 處理器體系結構不同于馮諾依曼與哈佛體系 壓棧與退棧與理解c等高級語言的工作原理息息相關,也是常用的攻擊手段 Buffer Overflow的主要技術基礎 day2 繼續讀前言之類的 本書前言 這本書,講述應用程序員如何能夠利用系統知識來編寫更好…

LLM 中 token 簡介與 bert 實操解讀

一、什么是 LLM? LLM,全稱為 Large Language Model(大語言模型),是一種基于神經網絡(主要是 Transformer 結構)的大規模自然語言處理(NLP)模型。其核心能力在于理解、生成…

【運維心得】三步更換HP筆記本電腦外殼

目錄 準備工作 第一步:拆卸電池與后蓋 第二步:處理隱藏螺絲 第三步:斷開內部排線 總結一下 今天又碰到了兩臺HP的筆記本,一臺外殼完好,但是無法開機,判斷是主板問題。另外一臺外殼有損壞,但…

深入 Linux 網絡(一) -- 網卡隊列

文章目錄網卡網卡的核心功能網卡的關鍵技術單隊列網卡多隊列網卡查看網卡信息ifconfigethtool查看網卡隊列Linux 查看中斷綁定網卡中斷查詢查看中斷綁定的 cpu總結1. 默認情況(單隊列網卡)2. 多隊列網卡3. 如何查看和配置綁定關系?4. 性能優化…

HTTP 1.0, 2.0 和 3.0 有什么區別?

HTTP/1.0 就像是“一問一答”的電話,每次打電話(請求)都得先撥號(建立連接),說完一句話(發送數據)就掛斷(關閉連接),再打下一通電話。效率比較低。…