Spring boot注解介紹

1. Spring 核心注解

Spring Boot 是基于 Spring 框架的,所以核心注解依然適用。

? 常見核心注解

  • @Component
    表示一個通用組件,Spring 會自動掃描并注入到容器中。

    @Component
    public class MyComponent {public void sayHello() {System.out.println("Hello from Component!");}
    }
    
  • @Service
    表示業務邏輯層的組件(語義化,更適合 Service 層)。

    @Service
    public class UserService {public String getUser() {return "User";}
    }
    
  • @Repository
    表示持久層的組件(DAO 層),會額外處理數據庫相關異常。

    @Repository
    public class UserRepository {public void saveUser() {System.out.println("User saved");}
    }
    
  • @Controller / @RestController

    • @Controller:返回視圖(模板引擎,如 Thymeleaf)。

    • @RestController:等價于 @Controller + @ResponseBody,返回 JSON 數據。

    @RestController
    @RequestMapping("/api")
    public class UserController {@GetMapping("/hello")public String hello() {return "Hello, Spring Boot!";}
    }
    
  • @Autowired
    自動注入 Bean(默認按類型匹配)。

    @RestController
    public class HelloController {@Autowiredprivate UserService userService;
    }
    

2. Spring Boot 特有注解

? 啟動 & 配置類

  • @SpringBootApplication
    Spring Boot 的核心啟動注解,相當于:

    • @Configuration

    • @EnableAutoConfiguration

    • @ComponentScan

    @SpringBootApplication
    public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
    }
    
  • @EnableAutoConfiguration
    開啟自動配置(Spring Boot 會根據依賴自動配置 Bean)。

  • @ConfigurationProperties
    將配置文件(application.yml / application.properties)綁定到 Java 類上。

    @Component
    @ConfigurationProperties(prefix = "app")
    public class AppProperties {private String name;private String version;// getter/setter
    }
    
  • @Value
    直接注入配置屬性。

    @Value("${app.name}")
    private String appName;
    

3. Web 注解

? 請求映射

  • @RequestMapping:定義路徑映射,可用于類和方法。

  • @GetMapping / @PostMapping / @PutMapping / @DeleteMapping:更具體的 HTTP 方法注解。

    @RestController
    @RequestMapping("/users")
    public class UserController {@GetMapping("/{id}")public String getUser(@PathVariable Long id) {return "User " + id;}
    }
    

? 參數綁定

  • @PathVariable:獲取路徑參數。

  • @RequestParam:獲取請求參數(?key=value)。

  • @RequestBody:綁定請求體 JSON 到對象。

  • @RequestHeader:獲取請求頭。

    @PostMapping("/create")
    public String createUser(@RequestBody User user,@RequestHeader("token") String token) {return "User created: " + user.getName() + ", token=" + token;
    }
    

4. 數據驗證注解(JSR-303)

常用于參數校驗,結合 @Valid@Validated 使用。

  • @NotNull:不能為空

  • @NotBlank:字符串不能為空

  • @Size(min, max):限制長度

  • @Email:校驗郵箱

  • @Pattern:正則校驗

    public class UserDTO {@NotBlank(message = "用戶名不能為空")private String username;@Email(message = "郵箱格式不正確")private String email;
    }@PostMapping("/register")
    public String register(@Valid @RequestBody UserDTO user) {return "注冊成功";
    }
    

5. 事務 & 異步

  • @Transactional:開啟事務管理。

    @Service
    public class OrderService {@Transactionalpublic void createOrder() {// 數據庫操作}
    }
    
  • @Async:異步執行方法。

    @Service
    public class EmailService {@Asyncpublic void sendEmail(String to) {System.out.println("Sending email to " + to);}
    }
    

6. 測試相關注解

  • @SpringBootTest:啟動完整 Spring Boot 上下文。

  • @WebMvcTest:僅啟動 Web 層。

  • @MockBean:模擬一個 Bean(用于單元測試)。

    @SpringBootTest
    class UserServiceTest {@Autowiredprivate UserService userService;
    }
    

7. 條件注解(高級用法)

Spring Boot 提供條件裝配,按環境決定是否加載 Bean。

  • @ConditionalOnProperty:配置屬性滿足條件時加載。

  • @ConditionalOnMissingBean:當容器中沒有某個 Bean 時才加載。

  • @Profile:指定環境下生效(如 dev, prod)。

    @Service
    @Profile("dev")
    public class DevUserService implements UserService {}@Service
    @Profile("prod")
    public class ProdUserService implements UserService {}
    

8. 其他常用注解

  • @Bean:在 @Configuration 類中定義 Bean。

  • @Primary:多個 Bean 時,標記優先注入。

  • @Qualifier:按名稱指定 Bean。

  • @Order:指定加載順序。


👉 總結:

  • 核心注解(@Component, @Service, @Controller…)用于 Bean 管理。

  • Spring Boot 特有注解(@SpringBootApplication, @ConfigurationProperties…)用于簡化配置。

  • Web 注解 處理請求映射和參數綁定。

  • 事務、異步、測試、條件注解 提供更高級的控制。

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

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

相關文章

撤銷回退 情況?:已經 add ,但沒有 commit

撤銷回退 情況?:已經 add ,但沒有 commit add 后還是保存到了暫存區呢?怎么撤銷呢? 1 # 向ReadMe中新增??代碼 2 hyb139-159-150-152:~/gitcode$ vim ReadMe 3 hyb139-159-150-152:~/gitcode$ cat ReadMe 4 hello bit 5 hell…

【Linux筆記】命令行與vim基礎

一、Linux命令行基礎 1. 基本語法命令空格參數(可寫可不寫)空格文件,文件夾(可寫可不寫)ls列出文件夾中的內容/opt 根目錄下的opt文件夾ls-a all顯示出所有文件以及隱藏文件/optls-a如果不寫則輸出一個點,當…

Redis 的整數集合:像分類收納盒一樣的整數專屬存儲

目錄 一、先懂定位:為什么需要整數集合?(銜接哈希表) 二、整數集合的結構:像 “貼了規格標簽的收納盒” 1. encoding:收納盒的 “規格標簽”(核心:決定格子大小) 2. …

Linux 進程狀態 — 僵尸進程

🎁個人主頁:工藤新一 🔍系列專欄:C面向對象(類和對象篇) 🌟心中的天空之城,終會照亮我前方的路 🎉歡迎大家點贊👍評論📝收藏?文章 文章目錄進…

React 中 key 的作用

React 中 key 的作用是什么? Date: August 31, 2025 Area: 原理key 概念 在 React 中,key 用于識別哪些元素是變化、添加或刪除的。 在列表渲染中,key 尤其重要,因為它能提高渲染性能和確保組件狀態的一致性。key 的作用 1&#x…

wpf之附加屬性

前言 附加屬性是 WPF 中一個非常強大和獨特的概念。簡單來說,它允許一個對象為另一個在其本身類定義中未定義的屬性賦值。 1、定義附加屬性 定義一個Watermark的附加屬性,該屬性的作用是將TextBox的附加屬性改變時,TextBox的字體顏色改成灰…

深入淺出 RabbitMQ-消息可靠性投遞

大家好,我是工藤學編程 🦉一個正在努力學習的小博主,期待你的關注實戰代碼系列最新文章😉C實現圖書管理系統(Qt C GUI界面版)SpringBoot實戰系列🐷【SpringBoot實戰系列】SpringBoot3.X 整合 Mi…

數字化時代,中小企業如何落地數字化轉型

大數據時代,各行各業的行業龍頭和大型集團都已經開始了數據管理,讓數據成為數據資產。但是在我國,中小企業的數量巨大,很多管理者忽視了這一點,今天我們就來聊一聊中小企業的數字化轉型。中小企業需要數字化轉型首先要…

Unity筆記(九)——畫線功能Linerenderer、范圍檢測、射線檢測

寫在前面:寫本系列(自用)的目的是回顧已經學過的知識、記錄新學習的知識或是記錄心得理解,方便自己以后快速復習,減少遺忘。這里只記錄代碼知識。十一、畫線功能Linerenderer畫線功能Linerenderer是Unity提供的畫線腳本,創建一個空…

刷題記錄(8)string類操作使用

一、僅反轉字母 917. 僅僅反轉字母 - 力扣(LeetCode) 簡單來說輸入字符串,要求你返回所有僅字母位置反轉后的字符串。 簡單看一個樣例加深理解: 前后互換,我想思路基本很明顯了,雙指針,或者說…

用好AI,從提示詞工程到上下文工程

前言 隨著 AI 大模型的爆發,提示詞工程(prompt engineering ) 一度是用戶應用 AI ,發揮 AI 能力最重要、也最應該掌握的技術。 但現在,在 “提示詞工程”的基礎上,一個更寬泛也更強力的演化概念被提出,也就是本文我們要介紹的 “上下文工程(Context Engineering)” …

計算機Python畢業設計推薦:基于Django+Vue用戶評論挖掘旅游系統

精彩專欄推薦訂閱:在下方主頁👇🏻👇🏻👇🏻👇🏻 💖🔥作者主頁:計算機畢設木哥🔥 💖 文章目錄 一、項目介紹二、…

? 肆 ? ? 默認安全:安全建設方案 ? a.信息安全基線

👍點「贊」📌收「藏」👀關「注」💬評「論」 在金融科技深度融合的背景下,信息安全已從單純的技術攻防擴展至架構、合規、流程與創新的系統工程。作為一名從業十多年的老兵,將系統闡述數字銀行安全體系的建設…

如何用AI視頻增強清晰度軟件解決畫質模糊問題

在視頻制作和分享過程中,畫質模糊、細節丟失等問題常常影響觀看體驗。無論是老舊視頻的修復還是低分辨率素材的優化,清晰度提升都成為用戶關注的重點。借助專業的AI技術,這些問題可以得到有效解決。目前市面上存在多種解決方案,能…

Linux92 shell:倒計時,用戶分類

問題 while IFS read -r line;doootweb kk]# tail -6 /etc/passwd user1r4:x:1040:1040::/home/user1r4:/bin/bash useros20:x:1041:1041::/home/useros20:/bin/bash useros21:x:1042:1042::/home/useros21:/bin/bash useros22:x:1043:1043::/home/useros22:/bin/bash useros23…

LinkedList源碼解析

1. 數據結構設計 (1) 節點結構 LinkedList 的核心是雙向鏈表節點 Node&#xff1a; private static class Node<E> {E item; // 存儲的元素Node<E> next; // 后繼節點Node<E> prev; // 前驅節點Node(Node<E> prev, E element, Node<E&g…

語雀批量導出知識庫

使用工具&#xff1a;yuque-dl 參考文檔&#xff1a; GitHub - gxr404/yuque-dl: yuque 語雀知識庫下載 Yuque-DL&#xff1a;一款強大的語雀資源下載工具_語雀文檔怎么下載-CSDN博客

電子電氣架構 --- 當前企業EEA現狀(下)

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

flink中的窗口的介紹

本文重點 無界流會源源不斷的產生數據,有的時候我們需要把無界流進行切分成一段一段的有界數據,把一段內的所有數據看成一個整體進行聚合計算,這是實現無界流轉成有界流的方式之一。 為什么需要窗口 數據是源源不斷產生的,我們可能只關心某個周期內的統計結果。比如電費…

自建es 通過Flink同步mysql數據 Docker Compose

資源es:7.18 kibana:7.18 flink:1.17.2目錄mkdir -p /usr/project/flink/{conf,job,logs} chmod -R 777 /usr/project/flink #資源情況 mysql8.0 Elasticsearch7.18 自建# 目錄結構 /usr/project/flink/ /usr/project/flink/ ├── conf/ │ ├── flink-conf.yaml │ └…