Spring Boot框架中常用注解

以下是Spring Boot框架中常用注解的詳細說明,包括名稱、用途、用法、使用位置及擴展示例,按功能模塊分類整理:


一、核心啟動與配置注解

1. @SpringBootApplication
  • 用途:主啟動類注解,整合了 @Configuration@EnableAutoConfiguration@ComponentScan
  • 用法:標記主類,啟動Spring Boot應用。
  • 位置級別。
  • 示例
    @SpringBootApplication
    public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
    }
    
2. @Configuration
  • 用途:聲明一個類為配置類,用于定義Bean。
  • 位置級別。
  • 示例
    @Configuration
    public class AppConfig {@Beanpublic DataSource dataSource() {return new HikariDataSource();}
    }
    
3. @Bean
  • 用途:在配置類中定義Bean實例,交給Spring容器管理。
  • 位置方法級別。
  • 示例
    @Bean
    public RestTemplate restTemplate() {return new RestTemplate();
    }
    

二、依賴注入(DI)注解

1. @Autowired
  • 用途:自動注入Bean,支持字段、構造器、方法注入。
  • 位置字段、構造器、方法參數
  • 示例
    @Service
    public class UserService {@Autowiredprivate UserRepository userRepository; // 字段注入
    }// 構造器注入(推薦)
    @Service
    public class OrderService {private final PaymentService paymentService;@Autowiredpublic OrderService(PaymentService paymentService) {this.paymentService = paymentService;}
    }
    
2. @Qualifier
  • 用途:按名稱指定注入的Bean(解決多個同類型Bean沖突)。
  • 位置字段、參數
  • 示例
    @Autowired
    @Qualifier("mysqlDataSource")
    private DataSource dataSource;
    
3. @Component
  • 用途:通用組件注解,標記類為Spring管理的Bean。
  • 子注解@Service@Repository@Controller
  • 位置級別。
  • 示例
    @Component
    public class EmailValidator { ... }
    
4. @Primary
  • 用途:當存在多個同類型Bean時,優先注入標記為@Primary的Bean。
  • 位置類或方法級別。
  • 示例
    @Bean
    @Primary
    public DataSource primaryDataSource() { ... }
    

三、Web開發注解

1. @RestController
  • 用途:標記為REST控制器,返回JSON/XML數據(等價于@Controller + @ResponseBody)。
  • 位置級別。
  • 示例
    @RestController
    @RequestMapping("/api/users")
    public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable Long id) { ... }
    }
    
2. @RequestMapping
  • 用途:映射HTTP請求路徑和方法。
  • 屬性path(路徑)、method(請求方法)、produces(返回類型)。
  • 位置類或方法級別。
  • 示例
    @RequestMapping(value = "/books", method = RequestMethod.GET)
    public List<Book> getBooks() { ... }
    
3. @GetMapping / @PostMapping 等
  • 用途:簡化的請求映射注解,支持GETPOSTPUTDELETE等。
  • 示例
    @PostMapping("/create")
    public ResponseEntity<User> createUser(@RequestBody User user) { ... }
    
4. @PathVariable
  • 用途:從URL路徑中獲取參數。
  • 位置方法參數
  • 示例
    @GetMapping("/orders/{orderId}")
    public Order getOrder(@PathVariable("orderId") String id) { ... }
    
5. @RequestParam
  • 用途:從請求參數中獲取值(如?name=John)。
  • 屬性required(是否必填)、defaultValue(默認值)。
  • 示例
    @GetMapping("/search")
    public List<User> searchUsers(@RequestParam(required = false) String keyword) { ... }
    
6. @RequestBody
  • 用途:將請求體中的JSON/XML數據反序列化為Java對象。
  • 位置方法參數
  • 示例
    @PostMapping("/users")
    public User createUser(@RequestBody User user) { ... }
    
7. @RequestHeader
  • 用途:從HTTP請求頭中獲取值。
  • 示例
    @GetMapping("/info")
    public String getInfo(@RequestHeader("User-Agent") String userAgent) { ... }
    
8. @CrossOrigin
  • 用途:允許跨域請求。
  • 位置類或方法級別。
  • 示例
    @CrossOrigin(origins = "http://localhost:3000")
    @RestController
    public class ApiController { ... }
    

四、數據訪問(JPA/Hibernate)注解

1. @Entity
  • 用途:標記類為JPA實體,對應數據庫表。
  • 位置級別。
  • 示例
    @Entity
    @Table(name = "employees")
    public class Employee { ... }
    
2. @Id / @GeneratedValue
  • 用途:定義主鍵字段及生成策略。
  • 示例
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
3. @Column
  • 用途:定義實體字段與數據庫列的映射關系。
  • 屬性name(列名)、nullable(是否允許空值)、length(長度)。
  • 示例
    @Column(name = "full_name", nullable = false, length = 50)
    private String name;
    
4. @Transactional
  • 用途:聲明方法或類需要事務管理(如數據庫操作失敗自動回滾)。
  • 位置類或方法級別。
  • 示例
    @Service
    public class OrderService {@Transactionalpublic void placeOrder(Order order) {orderRepository.save(order);inventoryService.updateStock(order.getProductId());}
    }
    

五、配置管理注解

1. @Value
  • 用途:注入配置文件中的屬性值。
  • 位置字段、方法參數
  • 示例
    @Value("${app.name}")
    private String appName;@Value("${app.timeout:30}") // 默認值30
    private int timeout;
    
2. @ConfigurationProperties
  • 用途:批量綁定配置文件屬性到Java對象。
  • 位置級別。
  • 示例
    # application.yml
    database:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: secret
    
    @ConfigurationProperties(prefix = "database")
    @Component
    public class DatabaseConfig {private String url;private String username;private String password;// getters & setters
    }
    

六、測試注解

1. @SpringBootTest
  • 用途:啟動完整Spring上下文進行集成測試。
  • 位置測試類
  • 示例
    @SpringBootTest
    class UserServiceTest {@Autowiredprivate UserService userService;
    }
    
2. @MockBean
  • 用途:在測試中模擬Bean(結合Mockito)。
  • 示例
    @SpringBootTest
    class PaymentServiceTest {@MockBeanprivate PaymentGateway paymentGateway;@Testvoid testPayment() {Mockito.when(paymentGateway.process(any())).thenReturn(true);// 測試邏輯}
    }
    

七、高級功能注解

1. @Scheduled
  • 用途:定時任務調度。
  • 屬性fixedRate(固定頻率)、cron(Cron表達式)。
  • 位置方法級別。
  • 示例
    @Scheduled(cron = "0 0 2 * * ?") // 每天凌晨2點執行
    public void generateDailyReport() { ... }
    // 需在啟動類添加 @EnableScheduling
    
2. @Async
  • 用途:異步執行方法。
  • 位置方法級別。
  • 示例
    @Async
    public void sendEmailAsync(String email) { ... }
    // 需在啟動類添加 @EnableAsync
    
3. @Cacheable / @CacheEvict
  • 用途:聲明方法結果緩存或清除緩存。
  • 示例
    @Cacheable(value = "users", key = "#userId")
    public User getUser(Long userId) { ... }@CacheEvict(value = "users", key = "#userId")
    public void deleteUser(Long userId) { ... }
    // 需在啟動類添加 @EnableCaching
    

八、異常處理注解

1. @RestControllerAdvice
  • 用途:全局異常處理,結合@ExceptionHandler使用。
  • 示例
    @RestControllerAdvice
    public class GlobalExceptionHandler {@ExceptionHandler(ResourceNotFoundException.class)@ResponseStatus(HttpStatus.NOT_FOUND)public ErrorResponse handleNotFound(ResourceNotFoundException ex) {return new ErrorResponse(ex.getMessage(), 404);}
    }
    

總結

通過合理使用這些注解,可以顯著簡化Spring Boot開發:

  • 依賴管理@Autowired@Qualifier@Primary
  • Web開發@RestController@GetMapping@RequestBody
  • 數據訪問@Entity@Transactional
  • 配置管理@Value@ConfigurationProperties
  • 測試與擴展@SpringBootTest@Scheduled@Async

實際開發中,可結合具體場景靈活組合這些注解,例如:

@RestController
@RequestMapping("/api")
@CrossOrigin
public class ProductController {@Autowiredprivate ProductService productService;@GetMapping("/products/{id}")public Product getProduct(@PathVariable Long id, @RequestParam String lang) { ... }@PostMapping("/products")@Transactionalpublic Product createProduct(@RequestBody Product product) { ... }
}

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

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

相關文章

Azure Delta Lake、Databricks和Event Hubs實現實時欺詐檢測

設計Azure云架構方案實現Azure Delta Lake和Azure Databricks&#xff0c;結合 Azure Event Hubs/Kafka 攝入實時數據&#xff0c;通過 Delta Lake 實現 Exactly-Once 語義&#xff0c;實時欺詐檢測&#xff08;流數據寫入 Delta Lake&#xff0c;批處理模型實時更新&#xff0…

車載以太網網絡測試 -23【TCPUDP通信示例】

1 摘要 在車載通信場景中&#xff0c;TCP以及UDP的通信可以用于多種應用&#xff0c;例如車輛狀態監控、遠程控制、數據采集等。以下是詳細的代碼示例&#xff0c;展示了如何使用Python實現簡單的TCP客戶端與服務端通信以及簡單的UDP客戶端與服務端通信&#xff0c;并模擬了車…

SpringBoot大學生競賽管理系統設計與實現

一個用于管理大學生競賽報名、信息查詢與競賽管理的系統&#xff0c;采用了現代化的SpringBoot框架進行開發。該系統的主要功能包括學生信息管理、教師信息管理、競賽報名審核、競賽信息管理等模塊&#xff0c;適用于學校或教育機構進行競賽活動的組織與管理。系統界面簡潔&…

深入解析libsunrpc:構建分布式系統的核心RPC庫

深入解析libsunrpc&#xff1a;構建分布式系統的核心RPC庫 引言 在分布式系統開發中&#xff0c;遠程過程調用&#xff08;Remote Procedure Call, RPC&#xff09; 是連接不同節點、實現跨網絡服務調用的關鍵技術。作為SUN公司開源的經典RPC實現&#xff0c;libsunrpc 憑借其…

MinIO搭建部署

1、命令行安裝 訪問monio官網下載應用程序 # wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20250228095516.0.0-1.x86_64.rpm -O minio.rpm # sudo dnf install minio.rpm # mkdir ~/minio # minio server ~/minio --console-address :90012、dock…

Linux修改SSH端口號

我這里那RedHat系列的操作系統舉例,修改SSH端口號 修改SSH配置文件:/etc/ssh/sshd_config,將端口號修改為2222.vim /etc/ssh/sshd_config重啟SSH服務systemctl restart sshd# 如果是比較舊的OS,使用下面的命令重啟 service ssh restart驗證端口更改是否成功netstat -tulnp …

【嵌入式Linux】基于ArmLinux的智能垃圾分類系統項目

目錄 1. 功能需求2. Python基礎2.1 特點2.2 Python基礎知識2.3 dict嵌套簡單說明 3. C語言調用Python3.1 搭建編譯環境3.2 直接調用python語句3.3 調用無參python函數3.4 調用有參python函數 4. 阿里云垃圾識別方案4.1 接入阿里云4.2 C語言調用阿里云Python接口 5. 香橙派使用攝…

【商城實戰(63)】配送區域與運費設置全解析

【商城實戰】專欄重磅來襲&#xff01;這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建&#xff0c;運用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用戶、商品、訂單等核心模塊開發&#xff0c;再到性能優化、安全加固、多端適配&#xf…

字節跳動實習生主導開發強化學習算法,助力大語言模型性能突破

目錄 禹棋贏的背景與成就 主要成就 DAPO算法的技術細節 算法優勢 禹棋贏的研究歷程 關鍵時間節點 字節跳動的“Top Seed人才計劃” 計劃特點 小編總結 在大模型時代&#xff0c;經驗不再是唯一的衡量標準&#xff0c;好奇心、執行力和對新技術的敏銳洞察力成為推動技術…

Rust + 時序數據庫 TDengine:打造高性能時序數據處理利器

引言&#xff1a;為什么選擇 TDengine 與 Rust&#xff1f; TDengine 是一款專為物聯網、車聯網、工業互聯網等時序數據場景優化設計的開源時序數據庫&#xff0c;支持高并發寫入、高效查詢及流式計算&#xff0c;通過“一個數據采集點一張表”與“超級表”的概念顯著提升性能…

使用LangChain實現基于LLM和RAG的PDF問答系統

目錄 前言一.大語言模型(LLM)1. 什么是LLM&#xff1f;2. LLM 的能力與特點 二、增強檢索生成(RAG)三. 什么是 LangChain&#xff1f;1. LangChain 的核心功能2. LangChain 的優勢3. LangChain 的應用場景4. 總結 四.使用 LangChain 實現基于 PDF 的問答系統 前言 本文將介紹 …

群核科技持續虧損近18億:營銷費用偏高,市場份額優勢面臨挑戰

《港灣商業觀察》施子夫 2025年開年&#xff0c;DeepSeek的爆火讓大眾將目光聚焦到了“杭州六小龍”。其中&#xff0c;杭州群核信息技術有限公司&#xff08;以下簡稱&#xff0c;群核科技&#xff09;因系“六小龍”中首家啟動上市的公司而被外界更多關注。 在此次遞表港交…

java版嘎嘎快充玉陽軟件互聯互通中電聯云快充協議充電樁鐵塔協議汽車單車一體充電系統源碼uniapp

演示&#xff1a; 微信小程序&#xff1a;嘎嘎快充 http://server.s34.cn:1888/ 系統管理員 admin/123456 運營管理員 yyadmin/Yyadmin2024 運營商 operator/operator2024 系統特色&#xff1a; 多商戶、汽車單車一體、互聯互通、移動管理端&#xff08;開發中&#xff09; 另…

音視頻學習(三十):fmp4

FMP4&#xff08;Fragmented MP4&#xff09;是 MP4&#xff08;MPEG-4 Part 14&#xff09;的擴展版本&#xff0c;它支持流式傳輸&#xff0c;并被廣泛應用于DASH&#xff08;Dynamic Adaptive Streaming over HTTP&#xff09;和HLS&#xff08;HTTP Live Streaming&#xf…

26考研——圖_圖的存儲(6)

408答疑 文章目錄 二、圖的存儲圖的存儲相關概念鄰接矩陣存儲方式鄰接矩陣的定義頂點的度計算鄰接矩陣的特點鄰接矩陣的局限性 應用場景鄰接矩陣的冪次意義&#xff08;了解即可&#xff09; 鄰接表存儲方式鄰接表定義鄰接表結構鄰接表的特點 鄰接矩陣和鄰接表的適用性差異十字…

以高斯(GaussDB) 為例, 在cmd 命令行連接數據,操作數據庫,關閉數據庫的詳細步驟

以下是使用 Windows 命令行&#xff08;cmd&#xff09; 操作 GaussDB&#xff08;以 GaussDB(for openGauss) 社區版為例&#xff09; 的詳細步驟&#xff0c;涵蓋 連接數據庫、基本操作、關閉數據庫 的全流程&#xff1a; 1. 環境準備 前提條件&#xff1a; 安裝 GaussDB&a…

HAL庫定時器配置

定時器的開啟需要手動開啟&#xff0c;例如在driver_capature.c開啟&#xff0c;該文件主要寫了具體的函數實現&#xff0c;與driver_can.c一樣&#xff0c;同時還有回調函數等一些高級的自定義函數。 這段代碼是 STM32 HAL 庫中用于初始化 定時器 2 (TIM2) 的函數 MX_TIM2_In…

使用Python開發自動駕駛技術:車道線檢測模型

友友們好! 我是Echo_Wish,我的的新專欄《Python進階》以及《Python!實戰!》正式啟動啦!這是專為那些渴望提升Python技能的朋友們量身打造的專欄,無論你是已經有一定基礎的開發者,還是希望深入挖掘Python潛力的愛好者,這里都將是你不可錯過的寶藏。 在這個專欄中,你將會…

Modern C++面試題及參考答案

目錄 解釋右值引用的定義及其與左值引用的核心區別 std::move 的實現原理是什么?為什么它本身不執行移動操作? 移動構造函數與拷貝構造函數的調用場景有何不同? 實現一個支持移動語義的類需要遵循哪些原則? 完美轉發(Perfect Forwarding)的實現原理及 std::forward 的…

Thinkphp(TP)框架漏洞攻略

1.環境搭建 vulhub/thinkphp/5-rce docker-compose up -d 2.訪問靶場 遠程命令執行&#xff1a; ? sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1] []whoami 遠程代碼執行&#xff1a; ? s/Index/\think\app/invokefunc…