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

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

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

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

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

二、請(qǐng)求映射與RESTful API注解系列

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

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

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

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

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

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

注解等價(jià)于目的/語(yǔ)義
@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ū)別

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

  • @Controller: 標(biāo)記一個(gè)類為控制器。通常與@RequestMapping配合使用,方法返回一個(gè)邏輯視圖名(如"userList"),由視圖解析器(View Resolver)渲染頁(yè)面。
  • @RestController: 組合注解,等價(jià)于 @Controller + @ResponseBody。它專門(mén)用于構(gòu)建 RESTful API,其方法返回值(如Java對(duì)象、集合)會(huì)被自動(dòng)轉(zhuǎn)換為JSON或XML格式,直接寫(xiě)入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對(duì)象,會(huì)被自動(dòng)轉(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和資源對(duì)象
        return new ResponseEntity<>(savedUser, HttpStatus.CREATED);
    }
}

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

這些注解負(fù)責(zé)將HTTP請(qǐng)求中的數(shù)據(jù)(查詢參數(shù)、路徑變量、請(qǐng)求體等)綁定到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: 請(qǐng)求體與響應(yīng)體的轉(zhuǎn)換

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

3.4.@RequestPart: 處理文件上傳

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

示例代碼塊 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 // 從請(qǐng)求體中獲取文件部分
) {
    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: 啟動(dòng)和配置的利器

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

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

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

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

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

4.3.@Autowired: 依賴自動(dòng)裝配機(jī)制

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

示例代碼塊 3:組件注冊(cè)與依賴注入

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

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

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

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

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

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

// 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 = "用戶名長(zhǎng)度必須在2到50之間")
    private String username;
    @Email(message = "郵箱格式不正確")
    private String email;
    // Getters and Setters...
}
@RestController
@Validated // 啟用類級(jí)別的校驗(yàn)
public class ValidationController {
    @PostMapping("/users")
    public String registerUser(@Validated @RequestBody UserDTO userDto) {
        // 如果校驗(yàn)失敗,Spring會(huì)拋出 MethodArgumentNotValidException 異常
        // 校驗(yàn)通過(guò),執(zhí)行業(yè)務(wù)邏輯
        return "User registered successfully!";
    }
}

六、總結(jié)與展望

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

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

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

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

相關(guān)文章

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

    spring文件下載的四種方式及對(duì)比分析

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

    Mybatis-Plus-Join表連接插件集成過(guò)程

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

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

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

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

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

    在java程序中使用protobuf

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

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

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

    Java實(shí)用工具之StringJoiner詳解

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

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

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

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

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

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

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

最新評(píng)論

子洲县| 红原县| 齐齐哈尔市| 竹山县| 克拉玛依市| 丰都县| 建平县| 塔河县| 航空| 尼勒克县| 永丰县| 八宿县| 宁乡县| 庄浪县| 泸西县| 成安县| 武汉市| 宁波市| 若羌县| 洪洞县| 科尔| 易门县| 东光县| 天峻县| 长阳| 资中县| 顺义区| 长顺县| 仁寿县| 蒙城县| 三江| 叙永县| 宣恩县| 平江县| 元朗区| 登封市| 泾阳县| 南江县| 郑州市| 库车县| 蒙山县|