Spring Boot常用注解详解:实例与核心概念

news2025/4/25 6:45:30

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:ss
    time-zone: GMT+8
  • 使用@JsonIgnore忽略敏感字段:
public class User {
    @JsonIgnore
    private 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;

    @Autowired
    public 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 {
    @Bean
    public 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.coloradmin.cn/o/2342207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【多线程】线程互斥 互斥量操作 守卫锁 重入与线程安全

文章目录 Ⅰ. 线程互斥概念Ⅱ. 互斥锁的概念Ⅲ. 互斥锁的接口一、互斥锁的定义二、初始化互斥锁三、销毁互斥锁四、互斥量的加锁和解锁① 加锁接口② 解锁接口五、改进买票系统💥注意事项Ⅳ. 互斥锁的实现原理一、问题引入二、复习知识三、实现原理Ⅴ. 封装锁对象 &&…

空闲列表:回收和再利用

空闲列表&#xff1a;回收和再利用 手动与自动内存管理 手动管理&#xff1a;程序员需要明确地分配和释放内存。自动管理&#xff1a;例如使用垃圾收集器(GC)&#xff0c;它能够自动检测并回收未使用的对象&#xff0c;不需要程序员干预。 对于某些数据结构如B树&#xff0c;…

计算机组成与体系结构:直接内存映射(Direct Memory Mapping)

目录 CPU地址怎么找到真实的数据&#xff1f; 内存映射的基本单位和结构 1. Pages&#xff08;页&#xff09;——虚拟地址空间的基本单位 2. Frames&#xff08;页框&#xff09;——物理内存空间的基本单位 3. Blocks&#xff08;块&#xff09;——主存和缓存之间的数据…

STM32提高篇: 蓝牙通讯

STM32提高篇: 蓝牙通讯 一.蓝牙通讯介绍1.蓝牙技术类型 二.蓝牙协议栈1.蓝牙芯片架构2.BLE低功耗蓝牙协议栈框架 三.ESP32-C3中的蓝牙功能1.广播2.扫描3.通讯 四.发送和接收 一.蓝牙通讯介绍 蓝牙&#xff0c;是一种利用低功率无线电&#xff0c;支持设备短距离通信的无线电技…

SpringMVC处理请求映射路径和接收参数

目录 springmvc处理请求映射路径 案例&#xff1a;访问 OrderController类的pirntUser方法报错&#xff1a;java.lang.IllegalStateException&#xff1a;映射不明确 核心错误信息 springmvc接收参数 一 &#xff0c;常见的字符串和数字类型的参数接收方式 1.1 请求路径的…

【程序员 NLP 入门】词嵌入 - 上下文中的窗口大小是什么意思? (★小白必会版★)

&#x1f31f; 嗨&#xff0c;你好&#xff0c;我是 青松 &#xff01; &#x1f308; 希望用我的经验&#xff0c;让“程序猿”的AI学习之路走的更容易些&#xff0c;若我的经验能为你前行的道路增添一丝轻松&#xff0c;我将倍感荣幸&#xff01;共勉~ 【程序员 NLP 入门】词…

从物理到预测:数据驱动的深度学习的结构化探索及AI推理

在当今科学探索的时代&#xff0c;理解的前沿不再仅仅存在于我们书写的方程式中&#xff0c;也存在于我们收集的数据和构建的模型中。在物理学和机器学习的交汇处&#xff0c;一个快速发展的领域正在兴起&#xff0c;它不仅观察宇宙&#xff0c;更是在学习宇宙。 AI推理 我们…

大模型AI的“双刃剑“:数据安全与可靠性挑战与破局之道

在数字经济蓬勃发展的浪潮中&#xff0c;数据要素已然成为驱动经济社会创新发展的核心引擎。从智能制造到智慧城市&#xff0c;从电子商务到金融科技&#xff0c;数据要素的深度融合与广泛应用&#xff0c;正以前所未有的力量重塑着产业格局与经济形态。 然而&#xff0c;随着…

操作系统概述与安装

主流操作系统概述 信创平台概述 虚拟机软件介绍与安装 windows server 安装 centos7 安装 银河麒麟V10 安装 一&#xff1a;主流服务器操作系统 &#xff08;1&#xff09;Windows Server 发展历程&#xff1a; 1993年推出第一代 WindowsNT&#xff08;企业级内核&am…

开发了一个b站视频音频提取器

B站资源提取器-说明书 一、功能说明 本程序可自动解密并提取B站客户端缓存的视频资源&#xff0c;支持以下功能&#xff1a; - 自动识别视频缓存目录 - 将加密的.m4s音频文件转换为标准MP3格式 - 将加密的.m4s视频文件转换为标准MP4格式&#xff08;合并音视频流&#xff09;…

基于javaweb的SpringBoot校园服务平台系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

PHYBench:首个大规模物理场景下的复杂推理能力评估基准

2025-04-23, 由北京大学物理学院和人工智能研究所等机构共同创建的 PHYBench 数据集&#xff0c;这是一个专门用于评估大型语言模型在物理场景下的复杂推理能力的高质量基准。该数据集包含 500 道精心策划的物理问题&#xff0c;覆盖力学、电磁学、热力学、光学、现代物理和高级…

Red:1靶场环境部署及其渗透测试笔记(Vulnhub )

环境介绍&#xff1a; 靶机下载&#xff1a; https://download.vulnhub.com/red/Red.ova 本次实验的环境需要用到VirtualBox&#xff08;桥接网卡&#xff09;&#xff0c;VMware&#xff08;桥接网卡&#xff09;两台虚拟机&#xff08;网段都在192.168.152.0/24&#xff0…

深入详解人工智能数学基础——概率论中的KL散度在变分自编码器中的应用

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…

测试模版x

本篇技术博文摘要 &#x1f31f; 引言 &#x1f4d8; 在这个变幻莫测、快速发展的技术时代&#xff0c;与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮&#xff0c;一名什么都会一丢丢的网络安全工程师&#xff0c;也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…

Openharmony 和 HarmonyOS 区别?

文章目录 OpenHarmony 与 HarmonyOS 的区别&#xff1a;开源生态与商业发行版的定位差异一、定义与定位二、技术架构对比1. OpenHarmony2. HarmonyOS 三、应用场景差异四、开发主体与生态支持五、关键区别总结六、如何选择&#xff1f;未来展望 OpenHarmony 与 HarmonyOS 的区别…

uniapp 仿小红书轮播图效果

通过对小红书的轮播图分析&#xff0c;可得出以下总结&#xff1a; 1.单张图片时容器根据图片像素定高 2.多图时轮播图容器高度以首图为锚点 3.比首图长则固高左右留白 4.比首图短则固宽上下留白 代码如下&#xff1a; <template><view> <!--轮播--><s…

R/G-B/G色温坐标系下对横纵坐标取对数的优势

有些白平衡色温坐标系会分别对横纵坐标取对数运算。 这样做有什么优势呢? 我们知道对数函数对0-1之间的因变量值具有扩展作用。即自变量x变化比较小时,经过对数函数作用后可以把因变量扩展到较大范围内,即x变化较小时,y变化较大,增加了识别数据的识别性。 由于Raw数据中的…

AI赋能安全调度系统:智能升级与功能跃迁

安全调度系统通过AI技术的深度整合&#xff0c;实现了从传统监控到智能决策的质变升级。这种智能化转型不仅提升了系统的响应速度和处理精度&#xff0c;更重塑了整个安全管理的运行范式。以下是AI技术为安全调度系统带来的核心功能强化&#xff1a; 智能风险识别与预警能力跃…

数据结构与算法(十二):图的应用-最小生成树-Prim/Kruskal

相关文献&#xff1a; 数据结构与算法(一)&#xff1a;基础理论 数据结构与算法(二)&#xff1a;线性表的实现 数据结构与算法(三)&#xff1a;线性表算法设计练习 数据结构与算法(四)&#xff1a;斐波那契数列 数据结构与算法(五)&#xff1a;LRU 数据结构与算法(六)&#xff…