Spring 框架中常用注解和使用方法

Spring 框架中常用注解的詳細解釋與應用場景,結合核心功能和實際開發需求進行分類說明:

1.組件定義注解

1.1 @Component

  • 作用:通用注解,將普通 Java 類標記為 Spring 管理的 Bean,由容器實例化和管理,相當于 XML 中的 <bean> 標簽。

  • 應用場景:非特定層次(如工具類、配置類)的組件聲明。

  • 示例:

     @Componentpublic class MyComponent { /* ... */ }

1.2 分層組件注解

  • @Controller:標記控制層(Web 層),處理 HTTP 請求并返回視圖或數據。
  • @Service:標記服務層(業務邏輯層),封裝復雜業務邏輯。
  • @Repository:標記數據訪問層(DAO 層),處理數據庫操作,支持異常轉換(如 SQL 異常轉 Spring DataAccessException)。
  • 區別:三者均為@Component的特化版本,通過語義化區分層次,增強代碼可讀性。

1.3 @RestController

  • 作用@Controller + @ResponseBody 的組合,用于 RESTful API 開發,方法返回值直接序列化為 JSON/XML。

  • 示例:

     @RestControllerpublic class UserController { @GetMapping("/user")public User getUser() { /* ... */ }}

2.依賴注入注解

2.1 @Autowired

  • 作用:按類型(byType)自動注入依賴,支持字段、構造器、方法注入。若存在多個同類型 Bean,需配合 @Qualifier 指定名稱。

  • 屬性required=false 允許依賴為空。

  • 示例:

     @Servicepublic class UserService {@Autowiredprivate UserRepository userRepo;}

2.2 @Resource

  • 作用:按名稱(byName)注入,屬于 JSR-250 規范。默認按字段名匹配,若無匹配則按類型注入。
  • @Autowired 區別:
    • @Autowired 是 Spring 特有,默認按類型注入,需配合 @Qualifier 指定名稱。
    • @Resource是 Java EE 標準,更靈活,適用于多實現類場景。

2.3 @Value

  • 作用:注入配置文件(如 application.properties)中的屬性值,支持表達式和默認值。

  • 示例:

     @Value("${app.timeout:30}")private int timeout;

3.配置類與自動裝配

3.1 @Configuration

  • 作用:標記配置類,替代 XML 配置文件,定義 Bean 的創建邏輯。

  • 示例:

     @Configurationpublic class AppConfig {@Beanpublic DataSource dataSource() { /* ... */ }}

3.2 @ComponentScan

  • 作用:指定 Spring 掃描的包路徑,自動注冊 @Component 及其派生注解的類為 Bean。
  • @SpringBootApplication 關系:@SpringBootApplication包含@ComponentScan,默認掃描啟動類所在包及其子包。

3.3 @Bean

  • 作用:在配置類中定義 Bean,常用于第三方庫(如數據庫連接池)的實例化。

  • 示例:

     @Configurationpublic class DataSourceConfig {@Beanpublic DataSource druidDataSource() { return new DruidDataSource(); }}

4.Spring MVC 相關注解

4.1 @RequestMapping

  • 作用:映射 HTTP 請求到控制器方法,支持類和方法級路徑,可指定請求方法(GET/POST 等)。

  • 簡化注解@GetMapping@PostMapping 等,語義更明確。

  • 示例:

     @Controller@RequestMapping("/api")public class ApiController {@GetMapping("/users")public String listUsers() { /* ... */ }}

4.2 參數綁定注解

  • @PathVariable:綁定 URL 路徑變量到方法參數。
     @GetMapping("/user/{id}")public User getUser(@PathVariable Long id) { /* ... */ }
  • @RequestParam:綁定請求參數到方法參數,支持默認值。

  • @RequestBody:將請求體 JSON 反序列化為 Java 對象。

5.條件注解與高級特性

5.1 @Conditional 系列

  • 作用:根據條件動態裝配 Bean,如 @ConditionalOnClass(類路徑存在時生效)、@ConditionalOnMissingBean(容器中無該 Bean 時生效)。
  • 應用場景:Spring Boot 自動配置的核心機制。

5.2 AOP 相關注解

  • @Aspect:定義切面類。
  • @Before/@After/@Around:定義通知類型,控制切面執行時機。

5.3 生命周期回調

  • @PostConstruct:Bean 初始化后執行的方法。
  • @PreDestroy:Bean 銷毀前執行的方法。

6.Spring Boot 核心注解

6.1 @SpringBootApplication

  • 組成@Configuration + @EnableAutoConfiguration + @ComponentScan,標記主啟動類。
  • 作用:啟用自動配置、組件掃描和配置類定義。

6.2 @EnableAutoConfiguration

  • 原理:根據類路徑依賴自動配置 Bean(如引入spring-boot-starter-web自動配置 Tomcat 和 Spring MVC)。

7.總結

  • 組件分層:通過 @Controller@Service@Repository 明確代碼職責。
  • 依賴管理:優先使用 @Autowired 按類型注入,多實現場景用 @Qualifier@Resource
  • 配置簡化@Configuration + @Bean 替代 XML,@SpringBootApplication 整合啟動邏輯。
  • RESTful 開發@RestController + @RequestBody/@PathVariable 構建 API。

通過合理使用這些注解,可顯著減少配置代碼,提升開發效率和代碼可維護性。

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

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

相關文章

使用 PaddlePaddle 官方提供的 Docker 鏡像

CUDA版本高PaddlePaddle不支持時&#xff0c;可以使用 PaddlePaddle 官方提供的 Docker 鏡像 1. 安裝 Docker Desktop1.1 下載 Docker Desktop1.2 安裝 Docker Desktop1.3 啟用 WSL 2 或 Hyper-V1.4 啟動 Docker Desktop1.5 Docker不運行解決方法 2. 拉取 PaddlePaddle Docker …

VSCode C/C++ 環境搭建指南

VSCode C/C 環境搭建指南 第一步&#xff1a;下載并安裝VSCode 訪問官方網站 打開瀏覽器&#xff0c;訪問Visual Studio Code官網。 選擇平臺 根據您的操作系統&#xff08;Windows、Mac、Linux&#xff09;選擇對應的版本進行下載。 下載和安裝 下載完成后&#xff0c;雙擊…

項目中使用柯里化函數

在項目中使用**柯里化函數&#xff08;Currying&#xff09;**可以顯著提高代碼的靈活性、可復用性和可讀性。柯里化是一種將多參數函數轉換為一系列單參數函數的技術。通過柯里化&#xff0c;可以將函數的調用方式從一次性傳遞所有參數改為分步傳遞參數&#xff0c;從而實現部…

Golang Channel 使用詳解、注意事項與死鎖分析

#作者&#xff1a;西門吹雪 文章目錄 一、引言&#xff1a;Channel 在 Go 并發編程中的關鍵地位二、Channel 基礎概念深度剖析2.1 獨特特性2.2 類型與分類細解 三、Channel 基本使用實操指南3.1 聲明與初始化3.3 單向 Channel 的運用 四、Channel 典型使用場景實戰案例4.1 協程…

C語言經典代碼題

1.輸入一個4位數&#xff1a;輸出這個輸的個位 十位 百位 千位 #include <stdio.h> int main(int argc, char const *argv[]) {int a;printf("輸入一個&#xff14;位數&#xff1a;");scanf("%d",&a);printf("個位&#xff1a;%d\n"…

stable-diffusion-webui-docker 構建 comfy-ui

Ubuntu 安裝 stable-diffusion-webui-docker 常見問題處理方法 這篇文章介紹了在 Ubuntu 上安裝 stable-diffusion-webui-docker&#xff0c;運行 docker compose --profile auto up --build 構建出的界面是 stable-diffusion-webui&#xff0c;如果運行 docker compose --prof…

【AI學習從零至壹】Pytorch神經?絡

Pytorch神經?絡 神經網絡簡介神經元激活函數 神經網絡神經?絡的?作過程前向傳播(forward) 反向傳播(backward)訓練神經?絡 Pytorch搭建并訓練神經?絡神經?絡構建和訓練過程數據預處理構建模型優化器&提取訓練數據訓練樣本 神經網絡簡介 神經元 在深度學習中&#x…

stm32 L432KC(mbed)入門第一課

目錄 一. 前言 二. 專欄意義 三. MS入門第一課 一. 前言 新的一年MS課程又開始了&#xff0c;同時也到了該專欄的第三個年頭。在前兩年中&#xff0c;該專欄幫助了很多第一次接觸單片機的同學。其中&#xff0c;有的同學訂閱專欄是為了更好的完成并且通過MS這門課程&#xf…

如何創建HTML自定義元素:使用 Web Component 的最佳實踐

什么是 Web Component&#xff1f; Web Component 是一組允許開發者創建可復用、自定義 HTML 元素的技術。它們使得我們可以像原生 HTML 標簽一樣使用這些自定義元素&#xff0c;從而提升代碼的模塊化和復用性。Web Component 的核心技術有以下三部分&#xff1a; Custom Ele…

【系統架構設計師】操作系統 - 文件管理 ② ( 位示圖 | 空閑區域 管理 | 位號 | 字號 )

文章目錄 一、空閑區域 管理1、空閑區域分配2、空閑區域 管理方式 簡介 二、位示圖 簡介1、位示圖 表示2、位示圖 字號3、位示圖 位號4、位示圖 中 比特位 分組管理 三、位示圖 考點1、計算磁盤 位示圖 的大小2、位示圖 位置計算 一、空閑區域 管理 1、空閑區域分配 在 索引文件…

基于 Docker 和 Flask 構建高并發微服務架構

基于 Docker 和 Flask 構建高并發微服務架構 一、微服務架構概述 &#xff08;一&#xff09;微服務架構的優點 微服務架構是一種將應用程序拆分為多個小型、自治服務的架構風格&#xff0c;在當今的軟件開發領域具有顯著的優勢。 高度可擴展性&#xff1a;每個微服務可以獨…

搭建Django開發環境

搭建Django開發環境 文章目錄 搭建Django開發環境[toc]一、安裝Python語言環境二、安裝Visual Studio Code三、安裝setuptools工具四、安裝Django框架 一、安裝Python語言環境 1.測試當前系統環境是否存在Python語言解釋器 python --version2.打開PowerShell終端&#xff0c;…

圖論part3|101.孤島的總面積、沉沒孤島、417. 太平洋大西洋水流問題

101. 孤島的總面積 &#x1f517;&#xff1a;101. 孤島的總面積思路&#xff1a;和昨天的島的區別是&#xff1a;是否有挨著邊的島嶼 所以可以先遍歷四條邊挨著的島嶼&#xff0c;把他們標記為非孤島再計算其他島嶼當中的最大面積 代碼&#xff1a;&#xff08;深度搜索&…

AP AR

混淆矩陣 真實值正例真實值負例預測值正例TPFP預測值負例FNTN &#xff08;根據閾值預測&#xff09; P精確度計算&#xff1a;TP/(TPFP) R召回率計算&#xff1a;TP/(TPFN) AP 綜合考慮P R 根據不同的閾值計算出不同的PR組合&#xff0c; 畫出PR曲線&#xff0c;計算曲線…

Ubuntu上部署Flask+MySQL項目

一、服務器安裝python環境 1、安裝gcc&#xff08;Ubuntu默認已安裝&#xff09; 2、安裝python源碼 wget https://www.python.org/ftp/python/3.13.2/Python-3.13.2.tar.xz 3、安裝Python依賴庫 4、配置python豆瓣源 二、服務器安裝虛擬環境 1、安裝virtualenv pip3.10 ins…

深度學習有哪些算法?

深度學習包含多種算法和模型&#xff0c;廣泛應用于圖像處理、自然語言處理、語音識別等領域。以下是主要分類及代表性算法&#xff1a; 一、基礎神經網絡 多層感知機&#xff08;MLP&#xff09; 最簡單的深度學習模型&#xff0c;由多個全連接層組成&#xff0c;用于分類和回…

【css酷炫效果】純CSS實現按鈕流光邊框

【css酷炫效果】純CSS實現按鈕流光邊框 緣創作背景html結構css樣式完整代碼效果圖 【css酷炫效果】純CSS實現按鈕流光邊框。 想直接拿走的老板&#xff0c;鏈接放在這里&#xff1a;https://download.csdn.net/download/u011561335/90490501 緣 創作隨緣&#xff0c;不定時更…

【Android】ListView控件在進入|退出小窗下的異常

1&#xff0c;描述 頁面使用了ListView控件&#xff0c;隨后進入小窗模式&#xff0c;導致視圖遮擋 2&#xff0c;根源 ListView雖然進入小窗relayout&#xff0c;其measureChild高度比全屏下要小&#xff0c;但是&#xff0c;其內部使用了Recycler機制&#xff0c;緩存了ite…

基于ssm的電子病歷系統(全套)

一、系統架構 前端&#xff1a;jsp | bootstrap | jquery 后端&#xff1a;spring | springmvc | mybatis 環境&#xff1a;jdk1.8 | mysql | maven | tomcat | idea 二、代碼及數據庫 三、功能介紹 01. 登錄 02. 主頁 03. 管理員-個人中心-修改密碼…

使用STM32CubeMX+DMA+空閑中斷實現串口接收和發送數據(STM32G070CBT6)

1.STM32CubeMX配置 &#xff08;1&#xff09;配置SYS &#xff08;2&#xff09;配置RCC &#xff08;3&#xff09;配置串口&#xff0c;此處我用的是串口4&#xff0c;其他串口也是一樣的 &#xff08;4&#xff09;配置DMA&#xff0c;將串口4的TX和RX添加到DMA中 &#…