最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Boot/Spring?MVC核心注解的作用詳解

 更新時間:2025年11月25日 10:36:40   作者:想不明白的過度思考者  
本文詳細(xì)介紹了SpringBoot和SpringMVC中最常用的15個核心注解,涵蓋了請求路由映射、參數(shù)綁定、RESTful?API、組件管理、數(shù)據(jù)校驗等內(nèi)容,通過豐富的代碼示例和圖表幫助開發(fā)者全面掌握這些注解,提升開發(fā)效率和代碼質(zhì)量,感興趣的朋友跟隨小編一起看看吧
本文將對Spring Boot和Spring MVC框架中最核心、最高頻使用的15個注解進(jìn)行深度剖析。我們將從請求路由映射(@RequestMapping系列)入手,詳細(xì)講解數(shù)據(jù)綁定、參數(shù)傳遞(@RequestBody, @RequestParam等)的機制,進(jìn)而探討RESTful架構(gòu)中的控制器(@RestController)和組件管理(@Service, @Autowired)的精髓。通過豐富的代碼示例和圖表,幫助開發(fā)者全面掌握這些注解,并迅速提升Spring應(yīng)用的開發(fā)效率和代碼質(zhì)量。

一、Spring/Spring MVC注解的核心作用

Spring框架是JavaEE領(lǐng)域的事實標(biāo)準(zhǔn),其成功的關(guān)鍵之一在于大量的注解(Annotations)機制。注解極大地簡化了XML配置,實現(xiàn)了約定大于配置的設(shè)計理念。通過注解,開發(fā)者能夠聲明式地定義類的職責(zé)、方法的行為、請求的映射規(guī)則以及依賴關(guān)系,使得代碼更加簡潔、易讀。

二、請求映射與RESTful API注解系列

這一系列注解定義了HTTP請求如何被路由到特定的Controller方法。

2.1.@RequestMapping: 路由映射的基石

@RequestMapping 是最基礎(chǔ)和最通用的請求映射注解,它可以作用于方法上。

  • 作用于類上: 定義基礎(chǔ)URI,相當(dāng)于一個命名空間。
  • 作用于方法上: 定義具體的URI和/或HTTP方法(如method=RequestMethod.GET)。

2.2.@GetMapping,@PostMapping,@PutMapping,@DeleteMapping: HTTP方法快捷注解

為了簡化開發(fā),Spring 4.3引入了更具語義化的組合注解,它們是 @RequestMapping 及其 method 屬性的快捷方式,是實現(xiàn) RESTful(Representational State Transfer) API的推薦方式。

注解等價于目的/語義
@GetMapping@RequestMapping(method = RequestMethod.GET)獲取資源
@PostMapping@RequestMapping(method = RequestMethod.POST)新建資源
@PutMapping@RequestMapping(method = RequestMethod.PUT)完整更新資源
@DeleteMapping@RequestMapping(method = RequestMethod.DELETE)刪除資源

2.3.@RestController與@Controller的區(qū)別

這是面試中的高頻問題,兩者的核心區(qū)別在于返回值處理:

  • @Controller: 標(biāo)記一個類為控制器。通常與@RequestMapping配合使用,方法返回一個邏輯視圖名(如"userList"),由視圖解析器(View Resolver)渲染頁面。
  • @RestController: 組合注解,等價于 @Controller + @ResponseBody。它專門用于構(gòu)建 RESTful API,其方法返回值(如Java對象、集合)會被自動轉(zhuǎn)換為JSON或XML格式,直接寫入HTTP響應(yīng)體。

示例代碼塊 1:RESTful Controller 演示

// Java
import org.springframework.web.bind.annotation.*;
@RestController // 相當(dāng)于 @Controller + @ResponseBody
@RequestMapping("/api/users") // 統(tǒng)一前綴
public class UserController {
    // 映射 GET /api/users
    @GetMapping 
    public List<User> getAllUsers() {
        // 返回List對象,會被自動轉(zhuǎn)換為JSON數(shù)組
        return userService.findAll(); 
    }
    // 映射 POST /api/users
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User savedUser = userService.save(user);
        // 返回狀態(tài)碼201 Created和資源對象
        return new ResponseEntity<>(savedUser, HttpStatus.CREATED);
    }
}

三、請求參數(shù)綁定與數(shù)據(jù)處理注解

這些注解負(fù)責(zé)將HTTP請求中的數(shù)據(jù)(查詢參數(shù)、路徑變量、請求體等)綁定到Controller方法的參數(shù)上。

3.1.@RequestParam: 處理URL查詢參數(shù)

用于從URL的查詢字符串(Query String)中提取參數(shù)值,例如 /users?id=10&name=Alice。

  • 屬性: value (參數(shù)名), required (是否必須, 默認(rèn)為true), defaultValue (默認(rèn)值)。

3.2.@PathVariable: 提取URI路徑變量

用于提取URI模板中的變量值,例如 RESTful URL 中的 /users/10,其中10是用戶ID。

3.3.@RequestBody與@ResponseBody: 請求體與響應(yīng)體的轉(zhuǎn)換

  • @RequestBody: 用于讀取HTTP請求體的內(nèi)容,并使用HttpMessageConverter將其反序列化(如從JSON反序列化為Java對象)。最常用于處理POST或PUT請求發(fā)送的JSON/XML數(shù)據(jù)。
  • @ResponseBody: 如前所述,用于將方法返回值序列化為響應(yīng)體(如JSON/XML)。

3.4.@RequestPart: 處理文件上傳

用于將multipart/form-data請求中的某個**部分(Part)**的數(shù)據(jù)綁定到方法參數(shù)上,通常用于文件上傳。它能直接綁定到 MultipartFile 對象。

示例代碼塊 2:參數(shù)綁定與文件上傳

// Java
@PostMapping("/{userId}/upload")
public String handleUpload(
    @PathVariable Long userId, // 從路徑中獲取用戶ID
    @RequestParam(value = "desc", required = false) String description, // 從查詢參數(shù)中獲取描述
    @RequestPart("file") MultipartFile file // 從請求體中獲取文件部分
) {
    String filename = file.getOriginalFilename();
    long size = file.getSize();
    // ... 執(zhí)行文件保存邏輯
    return "User " + userId + " uploaded " + filename + " successfully. Size: " + size + " bytes.";
}

四、核心組件管理與依賴注入注解

Spring 的核心是 IOC(Inversion of Control,控制反轉(zhuǎn))DI(Dependency Injection,依賴注入)。

4.1.@SpringBootApplication: 啟動和配置的利器

這是Spring Boot應(yīng)用啟動類的核心注解,它是一個組合注解,包含了:

  • @SpringBootConfiguration: 允許在上下文中注冊額外的Bean或?qū)肫渌渲妙悺?/li>
  • @EnableAutoConfiguration: 啟用Spring Boot的自動配置機制。
  • @ComponentScan: 掃描當(dāng)前包及其子包下的組件。

4.2.@Component,@Service,@Repository: 組件的職責(zé)劃分

這三個注解都是 Stereotype Annotations(定型注解),本質(zhì)上都等價于 @Component。它們的作用是標(biāo)記一個類為Spring容器管理的Bean(組件)。使用它們的目的主要是為了明確語義和職責(zé),提升代碼可讀性:

  • @Service: 標(biāo)記業(yè)務(wù)邏輯組件。
  • @Repository: 標(biāo)記數(shù)據(jù)訪問組件(通常具備異常轉(zhuǎn)換等特性)。
  • @Component: 標(biāo)記通用、不屬于上述任何層的組件。

4.3.@Autowired: 依賴自動裝配機制

Spring最常用的依賴注入注解。它通過 類型(Type) 查找匹配的Bean,如果找到多個,則會通過 名稱(Name) 進(jìn)一步區(qū)分。它可以用于構(gòu)造函數(shù)、字段、Setter方法上。

示例代碼塊 3:組件注冊與依賴注入

// Java
// 1. 數(shù)據(jù)訪問層
@Repository 
public class UserRepository {
    // 模擬數(shù)據(jù)庫操作
    public List<User> findAll() { /* ... */ } 
}
// 2. 業(yè)務(wù)邏輯層,依賴于數(shù)據(jù)訪問層
@Service
public class UserService {
    // 依賴注入:Spring容器會自動將UserRepository的實例注入到該字段
    @Autowired 
    private UserRepository userRepository;
    public List<User> findAll() {
        return userRepository.findAll();
    }
}

五、數(shù)據(jù)校驗(Validation)與最佳實踐

在Web應(yīng)用中,對用戶輸入的數(shù)據(jù)進(jìn)行校驗是必不可少的。Spring MVC集成了 JSR-303/JSR-349(Bean Validation) 規(guī)范。

5.1.@Validated: 啟用參數(shù)校驗

  • @Validated 作用于 Controller方法參數(shù)Controller類 上,告訴Spring需要對請求參數(shù)進(jìn)行校驗。
  • 需要配合javax.validation.constraints包下的注解(如@NotNull, @Min, @Max, @Size)使用。

示例代碼塊 4:結(jié)合 Bean Validation 實現(xiàn)數(shù)據(jù)校驗

// Java
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;
import org.springframework.validation.annotation.Validated;
// 定義UserDTO,使用約束注解
public class UserDTO {
    @Size(min = 2, max = 50, message = "用戶名長度必須在2到50之間")
    private String username;
    @Email(message = "郵箱格式不正確")
    private String email;
    // Getters and Setters...
}
@RestController
@Validated // 啟用類級別的校驗
public class ValidationController {
    @PostMapping("/users")
    public String registerUser(@Validated @RequestBody UserDTO userDto) {
        // 如果校驗失敗,Spring會拋出 MethodArgumentNotValidException 異常
        // 校驗通過,執(zhí)行業(yè)務(wù)邏輯
        return "User registered successfully!";
    }
}

六、總結(jié)與展望

本文詳細(xì)介紹了Spring Boot/Spring MVC開發(fā)中最常用的15個核心注解。從請求的入口(@RequestMapping系列)到數(shù)據(jù)的處理(@RequestBody等),再到組件的生命周期管理(@Service, @Autowired),這些注解構(gòu)成了Spring框架聲明式編程的基石。掌握這些注解,不僅能寫出規(guī)范的RESTful API,還能深刻理解Spring IoC和DI的運行機制。

在未來的Spring版本中,更多的功能將以函數(shù)式編程Kotlin/Coroutines的形式出現(xiàn),但這些核心的注解仍將是Java Spring開發(fā)的主流范式。

思考: @RestController@Controller + @ResponseBody 在功能上等價,那么在項目實踐中,你認(rèn)為使用哪一個更具優(yōu)勢?歡迎在評論區(qū)分享你的看法。

到此這篇關(guān)于Spring Boot/Spring MVC核心注解的作用詳解的文章就介紹到這了,更多相關(guān)springboot spring mvc注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring文件下載的四種方式及對比分析

    spring文件下載的四種方式及對比分析

    本文對比spring文件下載的四種方式,每種方式結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • Mybatis-Plus-Join表連接插件集成過程

    Mybatis-Plus-Join表連接插件集成過程

    Mybatis-Plus-Join是Mybatis-Plus的擴(kuò)展插件,支持左、右、內(nèi)連接查詢,保持原有開發(fā)風(fēng)格,通過JoinLambdaWrapper配置連接關(guān)系與查詢條件,簡化多表關(guān)聯(lián)操作,提升復(fù)雜SQL編寫效率
    2025-09-09
  • JAVA使用POI獲取Excel的列數(shù)與行數(shù)

    JAVA使用POI獲取Excel的列數(shù)與行數(shù)

    Apache POI 是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能。 下面這篇文章給大家介紹了JAVA使用POI獲取Excel列數(shù)和行數(shù)的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • JAVA Calendar設(shè)置上個月時,日期不存在或錯誤提示問題及解決

    JAVA Calendar設(shè)置上個月時,日期不存在或錯誤提示問題及解決

    在使用Java的Calendar類設(shè)置上個月的日期時,如果遇到不存在的日期(如4月31日),默認(rèn)會自動調(diào)整到下個月的相應(yīng)日期(如5月1日),這是為了確保日期計算的準(zhǔn)確性
    2025-12-12
  • 在java程序中使用protobuf

    在java程序中使用protobuf

    這篇文章主要介紹了protobuf的基本使用和同java結(jié)合的具體案例,感性興趣的小伙伴可以一起來閱讀下文
    2021-08-08
  • Java中List對象集合按對象中某字段進(jìn)行排序舉例

    Java中List對象集合按對象中某字段進(jìn)行排序舉例

    這篇文章主要給大家介紹了關(guān)于Java中List對象集合按對象中某字段進(jìn)行排序的相關(guān)資料,我們在日常開發(fā)中也經(jīng)常會用到排序算法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Java實用工具之StringJoiner詳解

    Java實用工具之StringJoiner詳解

    這篇文章主要介紹了Java實用工具之StringJoiner詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • SpringBoot限制接口訪問頻率功能實現(xiàn)

    SpringBoot限制接口訪問頻率功能實現(xiàn)

    最近在基于SpringBoot做一個面向普通用戶的系統(tǒng),為了保證系統(tǒng)的穩(wěn)定性,防止被惡意攻擊,我想控制用戶訪問每個接口的頻率,接下來通過本文給大家介紹SpringBoot限制接口訪問頻率功能實現(xiàn),需要的朋友可以參考下
    2023-05-05
  • AntDesign多環(huán)境配置啟動過程詳解

    AntDesign多環(huán)境配置啟動過程詳解

    這篇文章主要為大家介紹了AntDesign多環(huán)境配置啟動過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 基于ElasticSearch Analyzer的使用規(guī)則詳解

    基于ElasticSearch Analyzer的使用規(guī)則詳解

    這篇文章主要介紹了基于ElasticSearch Analyzer的使用規(guī)則,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論

玉溪市| 临汾市| 曲松县| 古蔺县| 防城港市| 观塘区| 房产| 常山县| 新密市| 聂拉木县| 兴业县| 林西县| 齐河县| 九寨沟县| 龙里县| 榕江县| 阳信县| 肇源县| 曲水县| 大田县| 中西区| 慈利县| 桃园市| 广丰县| 彭阳县| 吐鲁番市| 玉门市| 普格县| 昔阳县| 汨罗市| 建昌县| 韶关市| 临泽县| 荥经县| 油尖旺区| 凯里市| 石狮市| 平昌县| 嘉黎县| 宜兰市| 深水埗区|