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,不用改代码)。

java 复制代码
@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 连接。

@ConfigurationProperties+bean对象实现属性配置

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

@ConfigurationProperties(prefix = "my.db")+bean对象(如下面使用@Component)

  • 作用:将一组配置项批量映射到一个 Java 类中,类型安全,有代码提示。
java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix = "pig")
@Component
public class Pig {
    Integer id;
    Integer age;
    String name;
​}

在其上用@ConfigurationProperties(prefix = "pig")指定前缀 这样你就可以使用这个前缀在配置文件中去为这个对象的属性赋值。

复制代码
pig.id= 123
pig.name= amaidou
pig.age= 18

@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 (必会)。等;

相关推荐
掘金者阿豪2 小时前
MySQL迁移,别再信“改几行配置就能跑”:金仓KingbaseES深度兼容实战
后端
tuyanfei2 小时前
SpringSecurity+jwt实现权限认证功能
java
yhole2 小时前
【SpringBoot】单元测试实战演示及心得分享
java
SmartBrain2 小时前
FastAPI + LangGraph 与 SpringAI 在医疗场景应用及分析
人工智能·spring boot·spring·fastapi
OKkankan2 小时前
撕 STL 系列:封装红黑树实现 mymap 和 myset
java·c++·算法
Cosolar2 小时前
大模型多轮对话自动上下文压缩
人工智能·后端·面试
C蔡博士2 小时前
最近点对问题(Closest Pair of Points)
java·python·算法
APIshop2 小时前
Java调用亚马逊商品详情API接口完全指南
java·开发语言·python
不光头强2 小时前
jwt学习
java·大数据·学习