SpringBoot常见的注解

在这里插入图片描述

Spring Boot 常见注解详解

在 Spring Boot 开发中,注解是简化开发过程和提高效率的核心工具。通过使用各种注解,我们可以实现依赖注入、配置管理、Web 开发、数据访问等功能。以下是一些常见的 Spring Boot 注解,并对每个注解的作用进行了详细说明。


1. Spring Boot 核心注解

这些注解用于配置 Spring Boot 应用的基础设置和启用自动配置。

  • @SpringBootApplication
    这个注解是 Spring Boot 的核心注解,通常放置在主类上,作用是整合 @Configuration@EnableAutoConfiguration@ComponentScan。它使得 Spring Boot 应用可以自动配置和启动。

    @SpringBootApplication
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    
  • @Configuration
    用于标注一个类是配置类,相当于传统 Spring 中的 XML 配置。可以在配置类中使用 @Bean 来定义 Beans。

    @Configuration
    public class AppConfig {
        @Bean
        public MyService myService() {
            return new MyService();
        }
    }
    
  • @EnableAutoConfiguration
    启用 Spring Boot 的自动配置机制,帮助根据当前项目的类路径自动配置相关的 Spring Beans。一般不需要显式使用,通常由 @SpringBootApplication 自动包含。

  • @ComponentScan
    用于自动扫描指定包中的组件,并将其注册为 Spring 管理的 Beans。Spring 会自动扫描当前类所在包及其子包中的所有类。


2. Web 开发相关注解

这些注解用于创建 RESTful API 和处理 Web 请求。

  • @RestController
    组合注解 @Controller@ResponseBody,表示该类是一个控制器,并且所有方法的返回值会自动作为 HTTP 响应体返回,通常用于构建 RESTful 服务。

    @RestController
    public class MyController {
        @GetMapping("/hello")
        public String hello() {
            return "Hello, World!";
        }
    }
    
  • @RequestMapping
    用于将 HTTP 请求映射到相应的处理方法。可以指定请求的 URL、请求方法、参数等。它可以与 GETPOSTPUTDELETE 等 HTTP 方法结合使用。

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return "Hello, World!";
    }
    
  • @GetMapping
    @RequestMapping 的快捷方式,用于映射 HTTP GET 请求。

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
    
  • @PostMapping
    @RequestMapping 的快捷方式,用于映射 HTTP POST 请求。

    @PostMapping("/submit")
    public String submit(@RequestBody MyRequest request) {
        return "Data received: " + request.getData();
    }
    
  • @PathVariable
    用于将 URL 中的变量值映射到方法参数。

    @GetMapping("/users/{id}")
    public String getUserById(@PathVariable String id) {
        return "User ID: " + id;
    }
    
  • @RequestParam
    用于将请求的查询参数映射到方法的参数。

    @GetMapping("/search")
    public String search(@RequestParam String query) {
        return "Search query: " + query;
    }
    
  • @RequestBody
    用于将请求体中的 JSON 数据转换为 Java 对象。

    @PostMapping("/data")
    public String postData(@RequestBody MyData data) {
        return "Received: " + data.getValue();
    }
    

3. 依赖注入相关注解

用于管理应用中的 Bean 依赖关系,实现松耦合和自动装配。

  • @Autowired
    自动注入 Spring 容器中的 Bean,Spring 会根据类型匹配进行自动装配。

    @Autowired
    private MyService myService;
    
  • @Qualifier
    当多个相同类型的 Bean 存在时,使用 @Qualifier 指定注入的具体 Bean。

    @Autowired
    @Qualifier("specificService")
    private MyService myService;
    
  • @Inject
    来自 JSR-330 标准,功能与 @Autowired 类似,用于自动注入依赖。

  • @Resource
    JSR-250 标准注解,通过名称进行自动注入。

  • @Value
    用于注入配置文件中的属性值,支持表达式和系统变量。

    @Value("${app.name}")
    private String appName;
    

4. 数据访问相关注解

用于定义 JPA 实体、数据库交互等。

  • @Entity
    标识一个类是 JPA 实体,它会映射到数据库中的一张表。

    @Entity
    public class User {
        @Id
        @GeneratedValue
        private Long id;
        private String name;
    }
    
  • @Table
    用于指定实体类对应的数据库表名。

    @Entity
    @Table(name = "users")
    public class User {
        // Fields and methods
    }
    
  • @Id
    标记字段为实体的主键。

  • @GeneratedValue
    配合 @Id 使用,指定主键生成策略(如自增、序列等)。

  • @Repository
    标记数据访问层的 Bean,通常与 JPA 或 MyBatis 配合使用。


5. 事务管理相关注解

用于声明和管理事务,确保数据一致性。

  • @Transactional
    用于声明事务,保证方法的原子性。可以标注在类或方法上。

    @Transactional
    public void updateData() {
        // Method logic
    }
    

6. Spring Boot 配置相关注解

这些注解用于读取和处理配置文件中的属性。

  • @Value
    读取单个配置项或配置文件中的值。

  • @ConfigurationProperties
    用于将配置文件中的一组属性映射到一个 POJO 类。可以减少硬编码,方便管理大量的配置项。

    @ConfigurationProperties(prefix = "app")
    public class AppConfig {
        private String name;
        private String version;
    }
    

7. Spring Boot 测试相关注解

用于单元测试和集成测试。

  • @SpringBootTest
    启动一个完整的 Spring 容器,适用于集成测试。
  • @WebMvcTest
    专门用于测试 Spring MVC 控制器。
  • @DataJpaTest
    仅启动 JPA 相关的配置,用于测试数据访问层。
  • @MockBean
    用于模拟 Bean,通常与 @SpringBootTest 配合使用,模拟外部服务。

8. 其他常见注解

这些注解用于更细粒度的 Bean 管理和环境控制。

  • @Profile
    用于根据不同的环境或配置文件激活某个 Bean 或配置。
  • @PropertySource
    用于加载外部的配置文件到 Spring 环境中。
  • @Component
    用于标注一个类为 Spring 管理的 Bean。
  • @Service
    用于标注服务层的 Bean。
  • @Controller
    用于标注 MVC 控制器类。
  • @Configuration
    用于标注配置类,相当于 XML 配置文件。

在这里插入图片描述

这些注解大大简化了 Spring Boot 的开发过程,减少了大量的配置和样板代码。掌握这些注解的使用可以帮助开发者高效地构建 Spring Boot 应用。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934835.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Python 爬取某网站简历模板(bs4/lxml+协程)

使用 Python 爬取站长素材简历模板 简介 在本教程中,我们将学习如何使用 Python 来爬取站长素材网站上的简历模板。我们将使用requests和BeautifulSoup库来发送 HTTP 请求和解析 HTML 页面。本教程将分为两个部分:第一部分是使用BeautifulSoup的方法&am…

【QGIS入门实战精品教程】4.12:QGIS创建标识码(BSM)字段并生成标识码

文章目录 一、加载实验数据二、生成BSM三、说明一、加载实验数据 加载配套实验数据包(订阅专栏后,从私信查收)中的4.12.rar中的自然幢数据,如下图所示: 打开属性表,查看属性表中的BSM效果: BSM字段说明:字符串,10位长度,以1开头,从1开始的连续序号结尾,总长度为10…

【GL009】C/C++总结(一)

自查目录 1. typedef 和 #define 的区别 2. const 、volatile 和 static 的区别 3. const修饰指针 4. 数组指针和指针数组 5. 函数指针和指针函数 6. C/C内存管理 6.1 内存分布图解 6.2 C语言中的内存分配方式 6.3 堆(Heap)和栈(Sta…

Synchronizad优化原理(JUC)

目录 java对象头一:Monitor二:sychronized的优化轻量级锁(轻量级锁)锁膨胀(重量级锁)(重量级锁)锁自旋偏向锁(比轻量级锁更轻量)偏向锁状态如何撤销偏向锁批量…

Android显示系统(08)- OpenGL ES - 图片拉伸

Android显示系统(02)- OpenGL ES - 概述 Android显示系统(03)- OpenGL ES - GLSurfaceView的使用 Android显示系统(04)- OpenGL ES - Shader绘制三角形 Android显示系统(05)- OpenGL…

Vscode 构建 uniapp vue3 + ts 微信小程序项目

前言 为什么要使用 Vscode 来开发构建 uniapp 项目?从个人角度来讲,仅是想要 Vscode 丰富的插件生态,以及最重要的优秀的 TtypeScript 类型检查支持,因为本人是 TS 重度使用者。 如果你更习惯使用 js 进行开发,使用 …

[游戏开发] Unity中使用FlatBuffer

什么是FlatBuffer 为什么用FloatBuffer,优势在哪? 下图是常规使用的各种数据存储类型的性能对比。 对序列化数据的访问不需要打包和拆包——它将序列化数据存储在缓存中,这些数据既可以存储在文件中,又可以通过网络原样传输&…

软件工程 概述

软件 不仅仅是一个程序代码。程序是一个可执行的代码,它提供了一些计算的目的。 软件被认为是集合可执行的程序代码,相关库和文档的软件。当满足一个特定的要求,就被称为软件产品。 工程 是所有有关开发的产品,使用良好定义的&…

负载均衡策略:L(P)策略;L(Max) ;L(LDS)

负载均衡策略:L(P)策略;L(Max) ;L(LDS) 1. Proportion load distribution L(P)策略; 策略含义:服务器不配置为可变服务率,调度器按照服务器服务率的倒数比例分配负载。即每个服务器分配到的任务量与该服务器服务率的倒数成正比 2. (L(Max)) load distribution((L…

探店小程序:解锁商业新生态,定制未来

在数字化浪潮席卷全球的今天,商业的边界正在被重新定义。随着移动互联网技术的飞速发展,探店小程序作为一种新兴的商业模式,正以其独特的优势迅速成为连接商家与消费者的桥梁。我们刚刚为一家客户成功交付了一款集分销、分润、商业模式定制开…

从EXCEL表格到WEB TABLE的实践

前言 EXCEL管理数据 Bootstrap Bootstrap 是一个流行的开源前端框架,它由 Twitter 的员工开发,用于快速开发响应式和移动设备优先的网页和应用程序。 jQuery jQuery 是一个快速、小巧且功能丰富的 JavaScript 库。它简化了 HTML 文档的遍历、事件处理…

HarmonyOS(65) ArkUI FrameNode详解

Node 1、Node简介2、FrameNode2.1、创建和删除节点2.2、对FrameNode的增删改2.3、 FramNode的查询功能3、demo源码4、总结5、参考资料1、Node简介 在HarmonyOS(63) ArkUI 自定义占位组件NodeContainer介绍了自定义节点复用的原理(阅读本本篇博文之前,建议先读读这个),在No…

独家首发 | 基于 KAN、KAN卷积的轴承故障诊断模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…

【总结·反思·汇报·思考02】裸辞后,我的一些感想和感悟。

Hello,大家好! 首先,我需要向大家道个歉,对不起!因为最近发生了一些事情,博客文章一直没有更新。(90度鞠躬道歉) 那么,最近到底发生了什么呢?相信大家已经从…

解密分布式锁:保障系统一致性的关键

作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 目录 1. 前言 2. 为何要使用分布式锁&…

HarmonyOS-高级(一)

文章目录 一次开发、多端部署自由流转 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年12月09日12点19分 一次开发、多端部署 布局能力 自适应布局 拉伸能力均分能力占比能力缩放…

河工oj第七周补题题解2024

A.GO LecturesⅠ—— Victory GO LecturesⅠ—— Victory - 问题 - 软件学院OJ 代码 统计 #include<bits/stdc.h> using namespace std;double b, w;int main() {for(int i 1; i < 19; i ) {for(int j 1; j < 19; j ) {char ch; cin >> ch;if(ch B) b …

开源架构安全深度解析:挑战、措施与未来

开源架构安全深度解析&#xff1a;挑战、措施与未来 一、引言二、开源架构面临的安全挑战&#xff08;一&#xff09;代码漏洞 —— 隐藏的定时炸弹&#xff08;二&#xff09;依赖项安全 —— 牵一发而动全身&#xff08;三&#xff09;社区安全 —— 开放中的潜在危机 三、开…

Ubuntu上使用system()函数运行不需要输入密码

使用system()运行一些终端命令的时候&#xff0c;需要sudo权限&#xff0c;也就是必须输入密码&#xff0c;那么在程序自启动的时候就无法成功启动。如果设置Ubuntu下所有操作都不需要密码&#xff0c;安全性太低&#xff0c;所以我们可以将需要用到的终端指令给予无需输入密码…

HBuilderX(uni-app)Vue3路由传参和接收路由参数!!

uni-app搭建小程序时候Vue3语法接收路由参数&#xff0c;去官方文档查看&#xff0c;是onLoad的option接收参数&#xff0c;我试过&#xff0c;接收不到&#xff0c;上网查各种方法也是不太行&#xff0c;最后自己琢磨出来了&#xff0c;这参数藏得还挺深&#xff01;&#xff…