Spring Boot常用注解詳解:實例與核心概念

Spring Boot常用注解詳解:實例與核心概念

前言

Spring Boot作為Java領域最受歡迎的快速開發框架,其核心特性之一是通過注解(Annotation)簡化配置,提高開發效率。注解驅動開發模式讓開發者告別繁瑣的XML配置,專注于業務邏輯實現。本文將介紹Spring Boot中高頻使用的核心注解,結合實例幫助開發者快速掌握這些“魔法標簽”的用法。


一、啟動類與核心注解

1. @SpringBootApplication

作用:標識主啟動類,是@Configuration@EnableAutoConfiguration@ComponentScan的組合注解。

@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

二、Web開發相關注解

1. @RestController

作用:組合@Controller@ResponseBody,直接返回JSON數據。

@RestController
@RequestMapping("/api")
public class UserController {@GetMapping("/users")public List<User> getUsers() {return userService.findAll();}
}

2. @RequestMapping 及其變體

各注解適用場景與業務示例

  1. @GetMapping
    適用場景
  • 數據查詢操作(符合RESTful規范)
  • 獲取資源詳情/列表
  • 觸發緩存讀取
// 示例:獲取用戶分頁列表(配合@RequestParam)
@GetMapping("/products")
public Page<Product> getProducts(@RequestParam(defaultValue = "0") int page,@RequestParam(defaultValue = "10") int size) {return productService.getProducts(page, size);
}
  1. @PostMapping
    適用場景
  • 創建新資源(用戶注冊、訂單提交)
  • 觸發需要事務管理的操作
  • 表單提交處理
// 示例:用戶注冊(配合@RequestBody接收JSON)
@PostMapping("/register")
public ResponseEntity<User> register(@RequestBody UserDTO userDTO) {User newUser = userService.createUser(userDTO);return ResponseEntity.created(URI.create("/users/" + newUser.getId())).body(newUser);
}
  1. @PutMapping
    適用場景
  • 全量更新資源
  • 狀態變更操作
// 示例:更新用戶信息
@PutMapping("/users/{id}")
public User updateUser(@PathVariable Long id, @RequestBody UserUpdateVO updateVO) {return userService.updateUser(id, updateVO);
}
  1. @DeleteMapping
    適用場景
  • 刪除資源
  • 資源回收站操作
// 示例:刪除商品
@DeleteMapping("/products/{sku}")
public void deleteProduct(@PathVariable String sku) {productService.deleteBySku(sku);
}
  1. @PathVariable
    適用場景
  • RESTful風格URL中的資源定位
  • 需要強關聯資源ID的操作
// 示例:電商商品詳情頁
@GetMapping("/products/{sku}")
public Product getProduct(@PathVariable String sku) {return productService.getProductBySku(sku);
}
  1. @RequestParam
    適用場景
  • 分頁查詢參數(page/size)
  • 篩選條件(時間范圍、狀態過濾)
  • 非必需參數傳遞
// 示例:帶過濾條件的分頁查詢
@GetMapping("/orders")
public Page<Order> searchOrders(@RequestParam(required = false) LocalDate startDate,@RequestParam(required = false) LocalDate endDate,@RequestParam(defaultValue = "0") int page) {return orderService.searchOrders(startDate, endDate, page);
}

三、JSON數據處理注解

1. @RequestBody

作用:將請求體中的JSON數據綁定到Java對象

適用場景

  • POST/PUT請求中接收復雜結構數據
  • 前端表單提交JSON格式數據
  • 微服務間接口調用參數傳遞
// 示例:創建訂單
@PostMapping("/orders")
public Order createOrder(@RequestBody OrderCreateVO createVO) {return orderService.createOrder(createVO);
}

2. @ResponseBody

作用:將方法返回值序列化為JSON(@RestController中已默認啟用)

特殊使用場景

  • 在@Controller類中需要單個方法返回JSON時
  • 混合返回視圖和API的場景
// 示例:傳統Controller中的API方法
@Controller
public class HybridController {@ResponseBody@GetMapping("/api/status")public Map<String, Object> getSystemStatus() {return monitorService.getStatus();}
}

3. JSON處理注意事項

  • 需要添加Jackson依賴(Spring Boot已默認包含)
  • 日期格式建議統一處理:
# application.yml
spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8
  • 使用@JsonIgnore忽略敏感字段:
public class User {@JsonIgnoreprivate String password;  // 不序列化到JSON
}

4. 最佳實踐建議

  1. RESTful設計規范

    • GET:查詢
    • POST:創建
    • PUT:全量更新
    • PATCH:部分更新
    • DELETE:刪除
  2. 參數選擇原則

    • 資源標識用@PathVariable
    • 可選參數用@RequestParam
    • 復雜對象用@RequestBody
  3. JSON處理技巧

    • 使用DTO/VO對象隔離實體類
    • 字段脫敏處理(@JsonIgnore)
    • 統一響應格式(Result包裝類)
// 統一響應示例
public class Result<T> {private int code;private String message;private T data;// 構造方法省略...
}@GetMapping("/users/{id}")
public Result<User> getUser(@PathVariable Long id) {return Result.success(userService.getUserById(id));
}

通過合理組合這些注解,可以:

  1. 構建清晰的API端點
  2. 實現安全的參數綁定
  3. 處理復雜數據結構
  4. 保持代碼可維護性

實際開發中建議結合Swagger等API文檔工具,實時驗證注解配置效果。


四、依賴注入相關

1. @Autowired

作用:自動裝配Bean,推薦結合構造函數使用。

@Service
public class UserService {private final UserRepository userRepository;@Autowiredpublic UserService(UserRepository userRepository) {this.userRepository = userRepository;}
}

2. 組件標識注解

  • @Service:業務層組件
  • @Repository:數據訪問層組件
  • @Component:通用組件
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

五、配置相關注解

1. @Configuration & @Bean

作用:聲明配置類并創建Bean實例。

@Configuration
public class AppConfig {@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}

2. @Value

作用:注入配置文件屬性。

@Value("${app.page.size:10}")
private int defaultPageSize;

3. @ConfigurationProperties

作用:批量綁定配置屬性到對象。

@ConfigurationProperties(prefix = "app.redis")
@Data
public class RedisConfig {private String host;private int port;private String password;
}

六、條件化配置

1. @ConditionalOnProperty

作用:根據配置決定是否創建Bean。

@Bean
@ConditionalOnProperty(name = "app.cache.enabled", havingValue = "true")
public CacheManager cacheManager() {return new RedisCacheManager();
}

2. @Profile

作用:指定環境激活的配置。

@Bean
@Profile("dev")
public DataSource devDataSource() {// 開發環境數據源配置
}

總結

Spring Boot通過豐富的注解體系,實現了約定優于配置的開發理念。熟練掌握這些注解能夠:

  1. 快速構建RESTful API
  2. 實現優雅的依賴注入
  3. 靈活管理應用配置
  4. 按需啟用功能模塊

建議開發者結合官方文檔和實際項目實踐,逐步掌握更高級的注解使用技巧。Spring Boot的注解體系就像樂高積木,合理組合能搭建出高效可靠的企業級應用。


相關資源

  • Spring Boot官方文檔
  • Spring注解編程模型

希望這篇博客能幫助您系統掌握Spring Boot的核心注解!如有疑問歡迎留言討論。

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

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

相關文章

TRO再添新案 TME再拿下一熱門IP,涉及Paddington多個商標

4月2日和4月8日&#xff0c;TME律所代理Paddington & Company Ltd.對熱門IP Paddington Bear帕丁頓熊的多類商標發起維權&#xff0c;覆蓋文具、家居用品、毛絨玩具、紡織用品、游戲、電影、咖啡、填充玩具等領域。跨境賣家需立即排查店鋪內的相關產品&#xff01; 案件基…

經驗分享-上傳ios的ipa文件

.ipa格式的二進制文件&#xff0c;是打包后生成的文件&#xff0c;無論我們是放上去testflight測試還是正式上傳到app store&#xff0c;都需要先上傳到蘋果開發者中心的app store connect上的構建版本上。 在app store connect上&#xff0c;上傳構建版本的功能&#xff0c;它…

docker(3) -- 圖形界面

1. 前言 在wsl(8) – 圖形界面文章中介紹了wsl2默認是支持圖形界面的&#xff0c;現在我們嘗試下在docker中運行gui程序試試看。 2. x11-apps 啟動一個docker&#xff0c;安裝一些gui小程序&#xff0c;然后運行&#xff0c;發現會失敗。ubuntu_base詳見文章wsl(6) – 安裝d…

Docker容器跑定時任務腳本

最近搞了一個Docker容器跑腳本&#xff0c;想設置一個定時任務&#xff0c;每天8點運行一次&#xff0c;結果死活不成功。排查了一天&#xff0c;有一點當局者迷了&#xff0c;明明時間是對的&#xff0c;明明時區是對的&#xff0c;定時任務也是啟動的&#xff0c;它就是不執行…

【Linux】什么是完全限定域名

FQDN 是 “完全限定域名” (Fully Qualified Domain Name) 的縮寫。 FQDN 是一個互聯網上特定計算機或主機的完整且唯一的域名。它詳細說明了該主機在域名系統 (DNS) 層級結構中的確切位置。 一個 FQDN 通常由以下幾個部分組成&#xff0c;從左到右依次是&#xff1a; 主機名…

小結:BFD

*BFD&#xff08;雙向轉發檢測&#xff0c;Bidirectional Forwarding Detection&#xff09;是一種快速、輕量級的故障檢測機制&#xff0c;用于檢測網絡中兩點之間的連通性。它廣泛應用于各種場景 1. 檢測 IP 鏈路 應用場景&#xff1a; BFD 用于檢測兩臺設備之間的 IP 層連…

配置Spark歷史服務器,輕松查看任務記錄

在大數據處理中&#xff0c;Spark是一個強大的分布式計算框架。但當Spark服務重啟后&#xff0c;之前的運行記錄就會消失&#xff0c;給我們排查問題和分析任務執行情況帶來不便。這時&#xff0c;配置Spark歷史服務器就顯得尤為重要&#xff0c;它能幫助我們保存和查看歷史任務…

(六)RestAPI 毛子(外部導入打卡/游標分頁/Refit/Http resilience/批量提交/Quartz后臺任務/Hateoas Driven)

文章目錄 項目地址一、外部導入打卡功能1.1 創建實體1. Entry實體2. EntryImport實體3. 添加數據庫配置4. 創建表 1.2 創建DTOs1.3 創建GetEnties Controller 二、游標分頁2.1 創建所需要的DTOs1. 創建游標分頁的請求參數2. 創建CollectionResponse3. 添加游標編碼和解碼的DTO …

Node.js CSRF 保護指南:示例及啟用方法

解釋 CSRF 跨站請求偽造 (CSRF/XSRF) 是一種利用用戶權限劫持會話的攻擊。這種攻擊策略允許攻擊者通過誘騙用戶以攻擊者的名義提交惡意請求,從而繞過我們的安全措施。 CSRF 攻擊之所以可能發生,是因為兩個原因。首先,CSRF 攻擊利用了用戶無法辨別看似合法的 HTML 元素是否…

Flink介紹——實時計算核心論文之Dataflow論文總結

數據流處理的演變與 Dataflow 模型的革新 在大數據處理領域&#xff0c;流式數據處理系統的發展歷程充滿了創新與變革。從早期的 S4 到 Storm&#xff0c;再到 MillWheel&#xff0c;每一個系統都以其獨特的方式推動了技術的進步。S4 以其無中心架構和 PE&#xff08;Processi…

Arduino 入門學習筆記(五):KEY實驗

Arduino 入門學習筆記&#xff08;五&#xff09;&#xff1a;KEY實驗 開發板&#xff1a;正點原子ESP32S3 例程源碼在文章頂部可免費下載&#xff08;審核中…&#xff09; 1. GPIO 輸入功能使用 1.1 GPIO 輸入模式介紹 在上一文章中提及到 pinMode 函數&#xff0c; 要對…

Centos9安裝docker

1. 卸載docker 查看是否安裝了docker yum list | grep docker卸載老版本docker&#xff0c;拷貝自官網 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine卸載新版本…

Pgvector+R2R搭建RAG知識庫

背景 R2R是一個采用Python編寫的開源AI RAG框架項目&#xff0c;與PostgreSQL技術棧集成度高&#xff0c;運行需求資源少&#xff08;主要是本人的Macbook air m1內存只有8G&#xff09;的特點&#xff0c;對部署本地私有化化AI RAG應用友好。 Resource Recommendations Whe…

go中redis使用的簡單介紹

目錄 一、Redis 簡介 二、Go中Redis的使用 1. 安裝Go Redis包 2. 單機模式 連接示例 3. 哨兵模式 依賴 連接示例 三、Redis集群 1. 集群模式 集群部署 部署結構 使用redis-cli創建集群 連接示例 四、常用數據結構與操作 1. 字符串&#xff08;String&#xff0…

北京工業大學25計專上岸經驗分享

1.個人情況介紹 本科就讀于河北雙非&#xff0c;專業為計算機科學與技術&#xff0c;四級三次498&#xff0c;六級兩次460&#xff0c;拿過幾次校級獎學金&#xff0c;競賽經歷有藍橋杯國三、數學競賽省二。本科成績排名靠前&#xff0c;保研保7排8&#xff0c;遺憾選擇考研繼…

在 Ubuntu 24.04 系統上安裝和管理 Nginx

1、安裝Nginx 在Ubuntu 24.04系統上安裝Nginx&#xff0c;可以按照下面的步驟進行&#xff1a; 1.1、 更新系統軟件包列表 在安裝新軟件之前&#xff0c;需要先更新系統的軟件包列表&#xff0c;確保獲取到最新的軟件包信息。打開終端&#xff0c;執行以下命令&#xff1a; …

HarmonyOS4+NEXT星河版入門與項目實戰(26)-----版本控制與代碼托管

引言 隨著移動應用開發技術的不斷進步,華為推出的鴻蒙操作系統(HarmonyOS)以及其配套的集成開發環境DevEco Studio逐漸成為開發者關注的焦點。對于新手開發者來說,掌握版本控制和代碼托管不僅是提高工作效率的關鍵,也是團隊協作的重要基礎。本文將介紹如何在使用DevEco S…

利用Arcgis自己繪制shp文件

1.選擇自己想要創建的shp文件的位置 我是直接創建在連接文件夾中 2.右鍵-新建-shp 3.設置名稱、要素類型、空間參考 4、點擊創建要素 5、右側選擇圖層、創建面 6、開始繪制&#xff0c;雙擊任意位置結束繪制 之后可以改一下shp文件的名字

【C/C++】深入理解指針(六)

文章目錄 深入理解指針(六)1.sizeof和strlen的對比1.1 sizeof1.2 strlen1.3 sizeof和strlen的對? 2.數組和指針筆試題解析2.1 ?維數組2.2 字符數組代碼1&#xff1a;代碼2&#xff1a;代碼3&#xff1a;代碼4&#xff1a;代碼5&#xff1a;代碼6&#xff1a; 2.3 ?維數組 3.…

探索大語言模型(LLM):語言模型從海量文本中無師自通

文章目錄 引言&#xff1a;當語言模型學會“自己教自己”一、自監督學習&#xff1a;從“無標簽”中挖掘“有監督”信號二、語言模型的自監督訓練范式&#xff1a;兩大經典路徑1. 掩碼語言模型&#xff08;Masked Language Modeling, MLM&#xff09;——以BERT為例2. 自回歸語…