news 2026/8/27 18:18:43

springboot常用注解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
springboot常用注解

@Configuration

类上的 @Configuration 注解:标识 “配置类” @Configuration 是 Spring 的核心注解,作用是 告诉 Spring:这个类是 “配置类”,里面定义了项目的 “Bean(组件)” 和 “配置规则”。

没有 @Configuration,下面的 @Bean 注解会失效(Spring 不会识别和创建对应的组件); 配置类的本质是 “Bean 的工厂”,Spring 启动时会扫描带有 @Configuration 的类,执行里面的 @Bean 方法,将返回的对象存入 “Spring 容器”(相当于一个全局的组件仓库)。

@Bean 注解:

注册自定义 Bean 到 Spring 容器

@Bean 注解用在方法上,作用是 告诉 Spring:执行这个方法,将返回的对象作为 “Bean” 存入 Spring 容器,后续可通过 @Autowired 注入使用。

方法名默认是 Bean 的名称(比如 mqttClientFactory() 对应的 Bean 名称是 mqttClientFactory); 适用于:第三方组件(如 MQTT 连接工厂)或自定义组件,无法通过 @Service/@Component 注解标识时,用 @Bean 手动注册。

@value

@Value 是 Spring 的 “属性注入” 注解,作用是 将配置文件(如 application.yml)中的值,自动赋值给当前类 语法:${配置项路径},比如 ${mqtt.broker-url} 对应 yml 中 mqtt 节点下的 broker-url; 好处:无需手动读取配置文件(比如用 Properties 类加载),Spring 自动完成,且便于统一管理配置(修改时只改 yml,不用改代码)。

@Value("${mqtt.broker-url}") private String brokerUrl; // 读取 application.yml 中 mqtt.broker-url 的值 @Value("${mqtt.client-id}") private String clientId; // 读取 mqtt.client-id @Value("${mqtt.topic}") private String topic; // 读取 mqtt.topic

对应该类: 通过 @Value 拿到 EMQX 的连接地址、客户端 ID、订阅主题,后续用这些值配置 MQTT 连接。

@Value,它在读取单个值时很方便。但如果配置文件里有几十个相关的属性(比如数据库的 url, username, password, pool-size),用几十个@Value会很乱。所以我们可也以使用另一个作用于类上的注解

@ConfigurationProperties(prefix = "my.db")

  • 作用:将一组配置项批量映射到一个 Java 类中,类型安全,有代码提示。

@Autowired 注解:依赖注入(DI)

@Autowired 是 Spring 核心的 “依赖注入” 注解,作用是 自动从 Spring 容器中找到对应的 “Bean(组件)”,并注入到当前类中—— 不用手动 new InfluxService() 创建对象。

前提:InfluxService、RedisService 等类必须被 Spring 识别为 Bean(比如类上有 @Service 注解); 好处:解耦(当前类不用关心这些服务是怎么创建的)、便于测试(可替换为模拟服务)、统一管理对象生命周期(Spring 负责创建和销毁)。

@Autowired private InfluxService influxService; // 注入 InfluxDB 操作服务 @Autowired private RedisService redisService; // 注入 Redis 操作服务 @Autowired private AlarmService alarmService; // 注入告警检查服务”

Spring 常用 stereotype 注解

在软件工程和 UML(统一建模语言)中,Stereotype(构造型) 的意思是:“给现有的模型元素打上特定的标签,以表明它具有某种特殊的语义或用途。”

下面介绍结果常用的stereotype 注解

注解作用场景示例
@Component通用组件(无明确分层)工具类、通用处理器
@Service业务逻辑层(Service)操作数据库 / Redis 的业务服务
@Controller控制层(Web 接口)接收 HTTP 请求的 Controller
@Repository数据访问层(DAO)操作 MySQL 的 Mapper/Repository

1、关键语法:组件扫描 Spring Boot 默认扫描 主启动类所在包及其子包 中的 stereotype 注解。如果 RedisService 和主启动类不在同一包下,需要手动在主启动类加 @ComponentScan(basePackages = "com.xxx.service") 指定扫描路径,否则 Spring 无法识别该 Bean。

2、上面的结果注解本质上都是 @Component 的“别名”或“特化版”。

从技术实现角度(让 Spring 能扫描到并创建对象)完成可以直接用 @Component ,@Service, @Controller, @Repository 内部其实都标注了 @Component。但是,使用特定的 Stereotype 会更加清晰。

@RestController

在现代 Spring Boot 开发中,你还会经常见到在controller层的类上有:@RestController

它 =@Controller+@ResponseBody

区别

  • @Controller:告诉 Spring 这是 Web 控制层类,负责接收 HTTP 请求;(

  • @RestController:通常用于返回 JSON/XML 数据(前后端分离的 RESTful API 接口)。

这是因为其中的:@ResponseBody作用是自动将方法返回值(如 AjaxResult)转为 JSON 格式响应给前端(无需手动处理 JSON 转换)。

@RequestMapping({"/api/host"})

@RequestMapping({"/api/host"}):请求路径映射

作用:指定当前 Controller 所有接口的 “基础路径”,前端访问时需拼接该路径; 示例:@GetMapping("/list") 对应的完整访问路径是 http://localhost:8080/api/host/list; 语法细节: 支持多个路径:@RequestMapping({"/api/host", "/api/device-host"})(两个路径都能访问);

HTTP 请求方法注解

下面我们介绍一些http的请求方法注解(@GetMapping,@PostMapping,@DeleteMapping)的作用,对应http方法,前端访问方式;

@GetMapping/@PostMapping/@DeleteMapping

注解作用对应 HTTP 方法前端访问方式
@GetMapping("/list")处理查询请求(获取主机列表)GET浏览器访问、前端axios.get()
@PostMapping("/add")处理新增请求(添加主机)POST前端axios.post()(传 JSON)
@DeleteMapping("/delete")处理删除请求(删除主机)DELETE前端axios.delete()

进阶

参数接收与数据绑定

前面我们介绍了 @GetMapping 等 注解标明某方法对应处理哪个路径的请求;

我们再介绍在Controller方法上获取前端各种数据的注解(卸载参数上);

有@PathVariable,@RequestParam,@RequestBody

  • 变量。

    • 例:/users/{id}->public User get(@PathVariable Long id)

  • @RequestParam

    :获取查询参数。

    • 例:/users?name=Tom->public User get(@RequestParam String name)

  • @RequestBody

    非常重要!

    获取 POST/PUT 请求体中的 JSON 数据,并自动转换为 Java 对象。

    • 例:前端传{ "name": "Tom", "age": 18 }->public void add(@RequestBody User user)

数据校验

前端传过来的数据可能是空的、格式错误的(比如年龄是 -5,邮箱没有 @)。你不能在每个 Service 里写一堆if (name == null)

  • @Valid/@Validated:放在@RequestBody前面,开启校验。

  • 校验注解@NotNull,@Size,@Email,@Min,@Max等(放在 DTO 对象的字段上)。

  • 缺失后果:脏数据进入数据库,导致业务逻辑错误或系统崩溃。

事务管理

这是企业级开发的生命线。比如“转账”操作:A 扣钱,B 加钱。如果 A 扣钱成功了,B 加钱时报错了,怎么办?必须回滚!

  • @Transactional核心注解

    • 作用:加在 Service 层方法上。如果方法内发生运行时异常,Spring 会自动回滚数据库的所有操作,保证数据一致性。

  • 缺失后果:数据不一致,出现“钱扣了没到账”等严重事故。

总结

1、本文介绍了Springboot的几个配置说明:@Configuration(标识配置类,配置类本质是Bean的工程);@Bean(用在方法上,自定义组件),@value(将配置文件中的值诸如当前属性),也可以使用 @ConfigurationProperties(prefix = "my.db") 作用于类,将多个配置文件中的值一起注入;@Autowired(将依赖(bean对象)注入当前类);

2、对于类注册为bean:我们介绍了Spring 常用 stereotype 注解(@Componet:通用组件(使类变成bean),@Service:业务逻辑层@Controller:控制层;@Rrpository数据访问层,dao层),并讨论了细分而不是统一用@Componet的原因。

3、对于数据返回:我们介绍了@RestController(返回 JSON/XML 数据),并用之对比了@Controller;

又介绍了:@RequestMapping(指定当前 Controller 所有接口的 “基础路径”);

4、对于指定请求路径的处理:我们介绍了一些http的请求方法注解(@GetMapping,@PostMapping,@DeleteMapping)的作用,对应http方法,前端访问方式;

5、除此我们还有再介绍:

  • 参数接收:@PathVariable,@RequestParam,@RequestBody(必会)。

  • 数据校验:@Valid,@NotNull等。

  • 事务控制:@Transactional(必会)。等;

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 17:03:55

突破微信单设备限制:WeChatPad解锁多设备同时在线新方式

突破微信单设备限制:WeChatPad解锁多设备同时在线新方式 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 您是否曾因微信只能在一台设备登录而错过重要消息?WeChatPad作为一款基于LSPos…

作者头像 李华
网站建设 2026/7/14 17:03:54

前端文件导出方案:从痛点解决到高级应用指南

前端文件导出方案:从痛点解决到高级应用指南 【免费下载链接】js-file-download 项目地址: https://gitcode.com/gh_mirrors/js/js-file-download 在现代Web应用开发中,前端文件导出功能已成为数据交互的重要桥梁。无论是企业系统中的报表生成&a…

作者头像 李华
网站建设 2026/7/14 17:03:54

AI模型训练实战指南:从数据准备到模型调优

1. 数据准备:从“脏乱差”到“干净香” 很多朋友一上来就想跑模型,结果代码一执行,各种报错,或者模型效果惨不忍睹。我踩过最大的坑,就是栽在了数据上。数据准备这一步,就像炒菜前的备菜,菜没洗…

作者头像 李华
网站建设 2026/7/14 17:03:53

音乐自由破局指南:Unlock Music全场景解密方案

音乐自由破局指南:Unlock Music全场景解密方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitc…

作者头像 李华
网站建设 2026/7/14 17:03:56

实战指南:基于快马平台与elementui,从零到一开发电商订单管理后台系统

最近在做一个电商后台的订单管理模块,正好用上了Element UI,整个过程下来感觉这套组件库在构建中后台系统时确实高效。今天就把这个实战过程梳理一下,分享如何从零搭建一个功能完整的订单管理后台页面。整个过程我是在InsCode(快马)平台上完成…

作者头像 李华