当前位置:首页 > 技术分析 > 正文内容

还在为 Spring Boot3 注解使用发愁?一文带你全掌握!

ruisui8813小时前技术分析2

各位互联网大厂的后端开发朋友们,在咱们日常使用 Spring Boot3 开发项目的过程中,是不是经常会对各种注解感到困惑?明明知道注解很重要,能极大提升开发效率,可就是在具体使用时,分不清该用哪个,在什么场景下用。别担心,今天这篇文章就来帮大家一次性解决这些难题。

Spring Boot3介绍

Spring Boot3 作为目前后端开发中极为流行的框架,它的诸多优势大家都有目共睹,比如简化了 Spring 应用的搭建和开发过程,让我们能够快速构建高效、稳定的应用程序。而其中注解更是发挥了关键作用。注解本质上是一种元数据,它为我们的代码提供了额外的信息,这些信息可以在编译期、类加载期以及运行时被读取和利用。在 Spring Boot3 里,不同的注解各司其职,从配置应用程序,到处理请求映射,再到管理事务等,覆盖了开发的各个环节。了解并熟练运用这些注解,是我们提升开发技能,打造高质量项目的必技能。

注解介绍

@SpringBootApplication

这是 Spring Boot 3 应用程序的入口类上最常使用的注解。它是一个复合注解,融合了 @SpringBootConfiguration、@EnableAutoConfiguration 和 @ComponentScan。当我们在启动类上标注 @SpringBootApplication 时,就相当于告诉 Spring Boot,这是一个 Spring Boot 应用,让它开启自动配置、组件扫描等一系列功能。例如:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

在一个典型的电商项目中,我们只需要在启动类上添加这个注解,Spring Boot 就会自动帮我们配置好各种基础组件,像日志系统、依赖注入环境等,大大减少了前期繁琐的配置工作 。

@SpringBootConfiguration

此注解标记主配置类,它继承自 @Configuration。在配置类中,我们可以通过 @Bean 注解标记方法,这些方法返回的实例会被纳入 Spring 容器,实例名就是方法名。比如:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {
    @Bean
    public SomeService someService() {
        return new SomeService();
    }
}

假设我们有一个自定义的缓存服务 SomeService,通过这种方式,我们可以很方便地将其纳入 Spring 的管理体系,其他组件需要使用该缓存服务时,直接通过依赖注入获取即可,实现了代码的解耦和可维护性 。

@EnableAutoConfiguration

这个注解启用了 Spring Boot 的自动配置机制。它会去加载 spring.factories 文件中注册的各种 AutoConfiguration 类,当某个 AutoConfiguration 类满足 @Conditional 指定的生效条件时,就会实例化该类中定义的 Bean 并注入到 Spring 容器。例如,我们引入了 Spring Data JPA 的依赖,@EnableAutoConfiguration 会自动帮我们配置相关的数据库连接、事务管理等 Bean,大大减少了我们手动配置的工作量。

当我们在项目中添加了 MySQL 的依赖,Spring Boot 会根据 @EnableAutoConfiguration 自动配置好数据源、JdbcTemplate 等相关组件,我们无需再像传统 Spring 项目那样,在 XML 文件中进行大量复杂的配置,只需要在 application.properties 文件中配置好数据库连接信息,就能快速上手使用数据库操作功能 。

@ComponentScan

它用于指定 Spring 要扫描的包,默认会扫描主应用类所在的包及其子包。通过这个注解,Spring 能自动检测到标记为 @Controller、@Service、@Repository、@Component 等的组件,并将它们注册到容器中。比如我们将业务逻辑类放在 com.example.service 包下,只要主应用类在 com.example 包下,Spring 就能自动扫描到这些服务类并注册。

在一个大型的社交平台项目中,我们将用户管理、消息管理、动态管理等不同业务模块的服务类分别放在各自的子包中,通过 @ComponentScan 注解,Spring 能够精准地识别并注册这些组件,保证整个项目的业务逻辑有条不紊地运行 。

@RequestMapping

这是处理请求地址映射的重要注解,可以标注在类或方法上。标注在类上时,为该控制器的所有方法定义了一个共同的请求前缀;标注在方法上时,用于指定具体的请求 URL 和 HTTP 方法。例如:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/list")
    public String listUsers() {
        // 返回用户列表的逻辑
        return "User list";
    }
}

当用户在浏览器中访问 “/user/list” 路径时,Spring MVC 会将请求精准地路由到这个方法上,我们可以在方法内部编写查询数据库获取用户列表数据并返回给前端的逻辑 。

@GetMapping / @PostMapping

这两个注解是 @RequestMapping 的特化注解,分别用于更简洁地映射 HTTP GET、POST 请求到处理方法上。比如:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DataController {
    @GetMapping("/data")
    public String getData() {
        // 获取数据的逻辑
        return "Data";
    }

    @PostMapping("/save")
    public String saveData() {
        // 保存数据的逻辑
        return "Data saved";
    }
}

在前后端分离的项目架构中,前端通过 axios 发送 GET 请求到 “/data”,后端就能快速响应获取数据的请求;而当需要提交表单数据保存到数据库时,前端发送 POST 请求到 “/save”,后端相应方法就会执行数据保存操作 。

@PathVariable

在 RESTful 服务中经常用到,它可以从 URI 路径中提取参数值,并将其映射到方法的参数上。比如请求 URL 为 “/user/1”,我们可以这样获取路径中的 1:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @GetMapping("/user/{id}")
    public String getUser(@PathVariable Long id) {
        // 根据id获取用户信息的逻辑
        return "User with id " + id;
    }
}

在实现用户详情查询功能时,前端传递的用户 ID 就包含在 URL 路径中,通过 @PathVariable 注解,后端能够轻松获取该 ID 并查询对应的用户详细信息 。

@RequestBody

通常在 POST 请求中使用,它能将 HTTP 请求体的内容(如 JSON、XML 等)映射到一个 Java 对象,方便我们接收前端传递的复杂数据结构。例如前端传递一个 JSON 格式的用户信息:

{
    "name": "张三",
    "age": 25
}

后端可以这样接收:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @PostMapping("/user")
    public String saveUser(@RequestBody User user) {
        // 保存用户的逻辑
        return "User saved: " + user.getName();
    }
}

当用户注册新账号时,前端会将填写的用户名、密码、年龄等信息以 JSON 格式封装在请求体中发送到后端,通过 @RequestBody 注解,后端能够将这些数据自动转换为 User 对象,方便后续的保存操作 。

@Transactional

用于标识一个方法或类需要使用事务进行操作。当我们在服务类或方法上加上这个注解,Spring 会负责管理数据库的事务,确保操作的原子性、一致性、隔离性和持久性。比如在对数据库进行增删改查操作时,如果有多个操作需要保证要么都成功,要么都回滚,就可以使用 @Transactional 注解。例如:

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {
    @Transactional
    public void updateUserAndOrder() {
        // 更新用户信息的逻辑
        // 更新订单信息的逻辑
    }
}

在电商场景下,当用户修改了收货地址,同时订单状态也需要更新为 “地址已更新待发货”,这两个数据库操作就需要在一个事务中进行。如果其中一个操作失败,整个事务回滚,保证数据的一致性,避免出现用户地址更新了但订单状态未同步的情况 。

总结

到这里,我们已经详细介绍了 Spring Boot3 中常用的注解及其使用场景。各位后端开发的小伙伴们,赶紧在自己的项目中实践起来吧。熟练掌握这些注解,不仅能提升我们的开发效率,还能让我们的代码更加简洁、规范、易维护。大家在使用过程中有任何问题,或者有其他想要了解的 Spring Boot 相关知识,都欢迎在评论区留言讨论。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3825.html

分享给朋友:

“还在为 Spring Boot3 注解使用发愁?一文带你全掌握!” 的相关文章

Ubuntu 24.10发行版登场:Linux 6.11内核、GNOME 47桌面环境

IT之家 10 月 11 日消息,Canonical 昨日发布新闻稿,正式推出代号为 Oracular Oriole 的 Ubuntu 24.10 发行版。新版在内核方面升级到最新 6.11 版本,并采用 GNOME 47 桌面环境。Ubuntu 24.10 发行版调整了内核策略,开始选择最新的上游...

关于Vue页面跳转传参,参数不同, 但页面只获取参数一次的问题

#头条创作挑战赛#1.问题描述问题描述: element 展示表格(页面A),点击表格的每一行的查看详情按钮,可以携带此行的信息参数跳转到另一个页面(页面B),但是从A页面到B页面,只有第一次跳转的时候B页面可以获取到A页面的参数,返回再次A->B ,B页面无法获取到参数。2.解决办法:方法一...

Vue中的路由配置常用属性

router:路由页面跳转的核心库;引入路由:import VueRouter from 'vue-router'; 注册路由:const router = new VueRouter({ })mode:模式路由有hash history两种模式:hash模式URL中包含#,#后边是...

微信企业号首款永久免费应用问世

7月14日,微信企业号移动办公应用领跑者——办公逸宣布:其所研发的微信办公应用将永久免费,企事业单位只要拥有微信企业号都可以免费安装办公逸各项应用,此举标志着微信办公免费时代现已到来!据悉,办公逸(www.bangongyi.com)现已推出四大微信办公套件,分别为:移动办公管理套件、客户关系管理套...

微信将研发“应用号”体系 或成为App大杂烩应用

Akiha发表于 2016-01-11 18:11微信正在探讨一种新的公众号形态,即在现有的订阅号、服务号之外,再研发新的“应用号”体系。让用户不必去装各种 App,在微信里就能实现各种服务、功能;关注后,“应用号”平时不向用户发送消息,需要时,用户再去点开“应用号”等。目前,微信钱包内已有的服务,...

Intel Rapid Storage Technology (RST) 20.0.0.1038.3 驱动程序

Intel Rapid Storage Technology (RST) 20.0.0.1038.3 是一种软件包,旨在为支持的操作系统提供高性能的串行 ATA (SATA) 和 SATA RAID 功能。它提供了一种简便的方式来管理和优化硬盘驱动器的性能,并支持 RAID 配置,以提高数据安全性和...