Spring Boot 注解詳細解析:解鎖高效開發的密鑰

一、引言

Spring Boot 以其快速開發、自動配置等特性,成為構建 Java 應用程序的熱門框架。而注解在 Spring Boot 中扮演著至關重要的角色,它們如同魔法指令,簡化了配置流程,增強了代碼的可讀性與可維護性。本文將深入剖析 Spring Boot 中常見且重要的注解,助你更好地理解和運用 Spring Boot 進行開發。

二、核心配置注解

(一)@SpringBootApplication

  1. 作用:這是 Spring Boot 應用的核心注解,它組合了 @Configuration@EnableAutoConfiguration@ComponentScan 三個注解的功能。
    • @Configuration 表明該類是一個配置類,其中可以定義各種 Bean 實例。
    • @EnableAutoConfiguration 開啟自動配置功能,Spring Boot 會根據項目的依賴自動配置應用程序所需的 Bean,例如自動配置數據庫連接、Web 服務器等。
    • @ComponentScan 用于掃描指定包及其子包下的所有組件(如 @Component@Service@Repository 等注解標注的類),并將它們注冊為 Spring 容器中的 Bean。
  2. 示例
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MySpringBootApp {public static void main(String[] args) {SpringApplication.run(MySpringBootApp.class, args);}
}

(二)@Configuration

  1. 作用:用于定義配置類,在配置類中可以使用 @Bean 注解定義各種 Bean。這些 Bean 會被 Spring 容器管理,方便在應用的其他地方進行依賴注入。
  2. 示例
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyService();}
}class MyService {// 業務邏輯
}

(三)@Bean

  1. 作用:在 @Configuration 類中,使用 @Bean 注解來定義一個 Bean,即創建一個對象實例,并將其交給 Spring 容器管理。Spring 容器會負責該 Bean 的生命周期管理,包括創建、初始化和銷毀。
  2. 示例:上述 AppConfig 類中的 myService() 方法使用 @Bean 注解定義了一個 MyService 的 Bean。當其他組件需要使用 MyService 時,可以通過依賴注入獲取該 Bean 的實例。

三、依賴注入注解

(一)@Autowired

  1. 作用:用于自動裝配 Bean,它可以標注在字段、構造函數、方法上。Spring 容器會在上下文中查找與被標注對象類型匹配的 Bean,并將其注入到相應的位置。
  2. 示例
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class MyServiceImpl implements MyService {private AnotherService anotherService;@Autowiredpublic MyServiceImpl(AnotherService anotherService) {this.anotherService = anotherService;}// 業務方法
}

在上述示例中,通過構造函數注入了 AnotherService 的實例。

(二)@Qualifier

  1. 作用:當 Spring 容器中有多個相同類型的 Bean 時,@Autowired 無法確定要注入哪個 Bean,此時可以使用 @Qualifier 注解來指定具體要注入的 Bean 的名稱。
  2. 示例
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;@Service
public class MyServiceImpl implements MyService {private AnotherService anotherService;@Autowired@Qualifier("specificAnotherService")public MyServiceImpl(AnotherService anotherService) {this.anotherService = anotherService;}// 業務方法
}

假設存在名為 specificAnotherServiceAnotherService 類型的 Bean,通過 @Qualifier 注解確保注入的是這個特定的 Bean。

(三)@Resource

  1. 作用:與 @Autowired 類似,也用于依賴注入。不同之處在于,@Resource 首先按名稱進行匹配,如果找不到匹配的名稱,則按類型進行匹配。它可以標注在字段或 setter 方法上。
  2. 示例
import javax.annotation.Resource;
import org.springframework.stereotype.Service;@Service
public class MyServiceImpl implements MyService {@Resourceprivate AnotherService anotherService;// 業務方法
}

四、Web 開發注解

(一)@RestController

  1. 作用:這是 @Controller@ResponseBody 的組合注解。@Controller 用于標記一個類為 Spring MVC 的控制器,而 @ResponseBody 表示該控制器的方法返回的數據直接寫入 HTTP 響應體,而不是渲染一個視圖。所以 @RestController 常用于創建 RESTful 風格的 Web 服務,返回 JSON、XML 等格式的數據。
  2. 示例
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@GetMapping("/users")public String getUsers() {return "{\"message\":\"All users data\"}";}
}

(二)@RequestMapping

  1. 作用:用于映射 HTTP 請求到控制器的處理方法。可以在類級別和方法級別使用,定義請求的 URL 路徑、請求方法(GET、POST 等)、請求參數等。
  2. 示例
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api")
public class ProductController {@GetMapping("/products")public String getProducts() {return "{\"message\":\"All products data\"}";}
}

上述示例中,類級別 @RequestMapping("/api") 定義了基礎路徑,方法級別 @GetMapping("/products") 定義了具體的請求路徑,完整的請求路徑為 /api/products,且只接受 GET 請求。

(三)@GetMapping、@PostMapping、@PutMapping、@DeleteMapping

  1. 作用:這些注解是 @RequestMapping 的快捷方式,分別用于映射 HTTP 的 GET、POST、PUT 和 DELETE 請求。它們在方法級別使用,使代碼更加簡潔明了。
  2. 示例
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/users")
public class UserController {@GetMappingpublic String getAllUsers() {return "{\"message\":\"All users\"}";}@PostMappingpublic String createUser() {return "{\"message\":\"User created\"}";}@PutMapping("/{id}")public String updateUser() {return "{\"message\":\"User updated\"}";}@DeleteMapping("/{id}")public String deleteUser() {return "{\"message\":\"User deleted\"}";}
}

五、事務管理注解

(一)@Transactional

  1. 作用:用于聲明式事務管理。當一個方法或類被 @Transactional 注解標注時,Spring 會自動管理該方法或類中數據庫操作的事務。如果方法執行過程中出現異常,事務將自動回滾;如果方法正常執行完畢,事務將自動提交。
  2. 示例
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class OrderService {@Transactionalpublic void processOrder() {// 數據庫操作,如插入訂單、更新庫存等}
}

六、總結

Spring Boot 注解是開發過程中的得力助手,通過合理運用這些注解,可以極大地簡化開發流程,提高代碼的可維護性和可讀性。從核心配置到依賴注入,從 Web 開發到事務管理,每個注解都有其獨特的用途。深入理解并熟練掌握這些注解,將幫助你在 Spring Boot 的開發之路上更加得心應手,構建出高效、穩定的 Java 應用程序。

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

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

相關文章

【Python】抽象基類ABC

抽象基類(Abstract Base Classes)的核心作用 抽象基類(ABC)是Python中一種特殊的類,它通過abc模塊實現,主要服務于面向對象編程中的接口規范和設計約束。以下是它的核心作用: 1. 強制接口實現(核心作用) 確保子類必…

[python] Python單例模式:__new__與線程安全解析

一 實例的創建過程 我們之前了解過在構造一個類的實例化對象時,會默認調用__init__方法,也就是類的初始化也叫構造函數,但其實在調用__init__方法前會首先調用__new__方法(只有在py3新式類才有)。即下面 __new__(): 創建實例 作…

筆記本電腦打開網頁很慢,一查ip地址網段不對怎么處理

我有一個筆記本,在家里連WIFI后獲取到的ip地址網段不對,那么常規做法是手動去配置個靜態IP和DNS,要知道筆記本IP地址默認采用的是DHCP,也就是動態獲取ip地址。如果手動設置靜態IP,也就是固定IP的話,你換個場…

怎樣將MM模塊常用報表設置為ALV默認格式(MB52、MB5B、ME2M、ME1M等)

【SAP系統研究】 對SAP系統中的報表,最方便的格式就是ALV了,可排序、可導出,非常友好。 但有些常見報表卻不是默認ALV界面的,譬如MB52: 是不是有點別扭?但其實是可以后臺配置進行調整的。 現將一些常用報表修改為默認ALV的方法進行總結,便于大家使用。 一、MB52、MB5…

Redis——達人探店

達人探店 發布探店筆記 探店筆記類似點評網站的評價,往往是圖文結合,對應的表有兩個: 發布博文對應兩個接口 案例:實現查看發布探店筆記的接口 需求:點擊首頁的探店筆記,會進入詳情頁面,實現…

Git初始化相關配置

Git配置 在Git安裝完成后,windows操作系統上會多出一個Git Bash的軟件,如果是linux或者是macOS,那么直接打開終端,在終端中敲擊命令即可 # 檢查git版本 git -v # 或 git --version在使用git時,需要配置一下用戶名和郵…

MySQL JSON_ARRAYAGG 實現匯總+明細數據展示

一、業務場景 在投注記錄查詢功能中,我們需要展示每個彩票期號(userId lotteryIssue分組)的匯總數據(總金額、總注數),同時也要顯示該期號下的所有明細投注記錄。 解決方案:JSON_ARRAYAGG MySQL 5.7 提供的 JSON_A…

【Lua】Redis 自增并設置有效期

【Lua】Redis 自增并設置有效期 方案一 每次執行都會更新有效期 EVAL "local current redis.call(INCRBY, KEYS[1], ARGV[1]);if tonumber(ARGV[2]) > 0 then redis.call(EXPIRE, KEYS[1], ARGV[2]) end;return current;" 1 mycounter 1 10 參數: 1 代表KEY…

CCF第七屆AIOps國際挑戰賽季軍分享(RAG)

分享CCF 第七屆AIOps國際挑戰賽的季軍方案,從我們的比賽經歷來看,并不會,相反,私域領域問答的優秀效果說明RAG真的很重要 歷經4個月的時間,從初賽賽道第1,復賽賽道第2,到最后決賽獲得季軍&…

YOLO v2:目標檢測領域的全面性進化

引言 在YOLO v1取得巨大成功之后,Joseph Redmon等人在2016年提出了YOLO v2(也稱為YOLO9000),這是一個在準確率和速度上都取得顯著提升的版本。YOLO v2不僅保持了v1的高速特性,還通過一系列創新技術大幅提高了檢測精度…

Linux-Ubuntu安裝Stable Diffusion Forge

SD Forge在Win上配置起來相對簡單且教程豐富,而在Linux平臺的配置則稍有門檻且教程較少。本文提供一個基于Ubuntu24.04發行版(對其他Linux以及SD分支亦有參考價值)的Stable Diffusion ForgeUI安裝配置教程,希望有所幫助 本教程以N…

量子計算實用化突破:從云端平臺到國際競合,開啟算力革命新紀元

在硅谷某生物醫藥實驗室,研究員艾米麗正盯著量子計算模擬界面露出微笑 —— 搭載中電信 "天衍" 量子計算云平臺的 880 比特超導量子處理器,用 17 分鐘完成了傳統超算需 3 個月才能跑完的新型抗生素分子鍵合模擬。這個場景標志著量子計算正從 &…

計算機操作系統(七)詳細講解進程的組成與特性,狀態與轉換

計算機操作系統(七)進程的組成與特性,狀態與轉換 前言一、進程的組成1. 什么是“進程”?2. 進程的三個核心組成部分2.1 PCB(進程控制塊)—— 進程的“身份證戶口本”2.2 程序段—— 進程的“任務清單”2.3 …

MapReduce基本介紹

核心思想 分而治之:將大規模的數據處理任務分解成多個可以并行處理的子任務,然后將這些子任務分配到不同的計算節點上進行處理,最后將各個子任務的處理結果合并起來,得到最終的結果。 工作流程 Map 階段: 輸入數據被…

Linux操作系統實戰:中斷源碼的性能分析(轉)

Linux中斷是指在Linux操作系統中,當硬件設備或軟件觸發某個事件時,CPU會中斷正在執行的任務,并立即處理這個事件。它是實現實時響應和處理外部事件的重要機制,Linux中斷可以分為兩種類型:硬件中斷和軟件中斷&#xff0…

AI Agent開發第66課-徹底消除RAG知識庫幻覺-帶推理的RAG

開篇 在第64課《AI Agent開發第64課-DIFY和企業現有系統結合實現高可配置的智能零售AI Agent(上)》中我們提到了提示詞Rewrite,同時還講到了2024年年末開始出現的新的理論,并把RAG系統推入到了3.0模式,業界出現了“3R”理念的RAG引擎,基于“3R”理念可以徹底消除RAG的幻覺…

Clion內置宏$PROJECT_DIR$等

CLion 內置宏 文章目錄 CLion 內置宏通用路徑相關宏路徑相對化宏 官方文檔地址: https://www.jetbrains.com/help/clion/built-in-macros.html 通用路徑相關宏 宏名稱含義說明示例$WORKSPACE_DIR$當前項目所屬的工作區根目錄路徑。/home/user/workspace$PROJECT_D…

機器學習基礎課程-5-課程實驗

5.1 實驗介紹 實驗背景 在這個項目中,您將使用1994年美國人口普查收集的數據,選用幾個監督學習算法以準確地建模被調查者的收入。然后,您將根據初步結果從中選擇出最佳的候選算法,并進一步優化該算法以最好地建模這些數據。你的目…

Android RecyclerView自帶的OnFlingListener,Kotlin

Android RecyclerView自帶的OnFlingListener,Kotlin Android啟動應用時屏蔽RecyclerView滑動,延時后再允許滑動,Kotlin-CSDN博客 使用了GestureDetectorRecyclerView的setOnTouchListener檢測用戶的快滑fling事件。發現RecyclerView也自帶了監…

第3.4節 調用鏈路分析服務開發

3.4.1 什么是Code Call Graph(CCG) Code Call Graph(CCG)即業務代碼中的調用關系圖,是通過靜態分析手段分析并構建出的一種描述代碼間關系的圖。根據精度不同,一般分為類級別、方法級別、控制流級別&#x…