一文掌握 Spring Boot 常用注解,保姆级整理,建议收藏!

news2024/11/17 1:31:30

亲兄弟篇:   SpringBoot注解大全(超详细)_Maiko Star的博客-CSDN博客

一、SpringBoot常用注解

二、Bean处理注解

2.1 @Resource

依赖注入,自动导入标注的对象到当前类中,比如我们的 Controller 类通常要导入 Service 类(需要注意这里 Service 类要被 Spring 容器管理)。

2.2 @Component、@Repository、@Service、@Controller、@RestController

我们一般使用 @Resource 注解让 Spring 容器帮我们自动装配 bean。要想把类标识成可用于 @Resource 注解自动装配的 bean 就需要我们使用这几个注解了,它们表示对应的类将被 Spring 容器管理。

  • @Component :通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注;

  • @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作;

  • @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层;

  • @Controller : 对应 Spring MVC 控制层,一般需要注入 Service 类返回结果数据;

  • @RestController : 继承于 @Controller,区别在于标注后整个类所有方法将直接返回 JSON 数据,不再需要视图解析处理,目前前后端分离的项目后端都是直接用这个注解的;

2.3  @Configuration

标注是 Java 代码的配置类, Spring Boot 中推荐这种做法不再使用 xml 配置了;

2.4   @Scope

声明 Spring Bean 的作用域,作用于一共有以下几种:

  • singleton:唯一 bean 实例,Spring 中的 bean 默认都是单例的。

  • prototype:每次请求都会创建一个新的 bean 实例。

  • request:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。

  • session:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

三、HTTP请求注解

3.1  @GetMapping

等价于 @RequestMapping(value="/test",method=RequestMethod.GET)

3.2  @PostMapping

 3.3  @PutMapping

put 方式的请求,常用语更新服务器上的资源。举个例子:PUT /users/7(更新编号为 7 的学生)

3.4  @DeleteMapping

DELETE 请求,从服务器删除特定的资源。

四、前后端参数传递注解

4.1  @RequestParam & @PathVariable

@RequestParam 用在方法的参数前面,获取请求中表单类型的key=value格式的数据。

@PathVariable 用于获取请求路径中的参数。

4.2  @RequestBody

获取请求 body 中的数据,常用于搭配 @PostMapping 请求来提交对象数据.  请求体 的Content-Type 必须为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。

系统会使用 HttpMessageConverter 或者自定义的 HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。

强调一下:请求方法只可以有一个@RequestBody,但是可以有多个 @RequestParam 和 @PathVariable。 如果你的方法必须要用两个 @RequestBody 来接受数据的话,那你就只思考下你的设计了,或者套娃形式的。

4.3  @ResponseBody

表示该方法的返回结果直接写入 HTTP response body 中,格式为 json。上面我们提到的 @RestController 其实就是 @Controller 和 @ResponseBody 两个结合起来的。

五、读取配置注解

5.1  @value

可以在任意 Spring 管理的 Bean 中通过这个注解获取任何来源配置的属性值。比如我们的 application.properties 或者 application.yml 配置文件中配置的属性值,当然也可以是 JVM 属性配置或者系统环境变量配置的值,如果对 Spring Boot 应用程序都有哪些属性配置源以及它们之间的优先级不了解的小伙伴可以看我之前的文章:Spring Boot 属性配置你所不知道的细节。

5.2  @ConfigurationProperties(重点)

上面 @Value 在每个类中获取属性配置值的做法其实是不推荐的,我们一般在企业项目开发中,不会使用那么杂乱无章的写法而且维护也麻烦,通过就是一次性读取到一个 Java 配置类,然后需要使用的地方直接引用这个类就可以多次访问了,方便维护。

5.3  @PropertySource

这个注解是用来指定读取我们自定义的配置文件的。

六、参数校验注解

数据的校验的重要性就不用说了,即使在前端对数据进行校验的情况下,我们还是要对传入后端的数据再进行一遍校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据。

JSR(Java Specification Requests) 是一套 JavaBean 参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们 JavaBean 的属性上面,这样就可以在需要校验的时候进行校验了,非常方便!

校验的时候我们实际用的是 Hibernate Validator 框架。Hibernate Validator 是 Hibernate 团队最初的数据校验框架,Hibernate Validator 4.x 是 Bean Validation 1.0(JSR 303)的参考实现,Hibernate Validator 5.x 是 Bean Validation 1.1(JSR 349)的参考实现,目前最新版的 Hibernate Validator 6.x 是 Bean Validation 2.0(JSR 380)的参考实现。

需要注意的是从 Spring Boot 2.3开始,我们还需要显式地添加 spring-boot-starter-validation 依赖项,在此之前的 Spring Boot 版本是在 spring-boot-starter-web 依赖项中包含的不需要额外引入。

我现在使用的是 Spring Boot 2.5.2 版本了,所以手动增加依赖:

👉 需要注意的是: 所有的注解,推荐使用 JSR 注解,即 javax.validation.constraints,而不是 org.hibernate.validator.constraints

6.1  Bean字段验证注解

  • @NotEmpty 被注释的字符串的不能为 null 也不能为空

  • @NotBlank 被注释的字符串非 null,并且必须包含一个非空白字符

  • @Null 被注释的元素必须为 null

  • @NotNull 被注释的元素必须不为 null

  • @AssertTrue 被注释的元素必须为 true

  • @AssertFalse 被注释的元素必须为 false

  • @Pattern(regex=,flag=)被注释的元素必须符合指定的正则表达式

  • @Email 被注释的元素必须是 Email 格式。

  • @Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值

  • @Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值

  • @DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值

  • @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

  • @Size(max=, min=)被注释的元素的大小必须在指定的范围内

  • @Digits (integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内

  • @Past被注释的元素必须是一个过去的日期

  • @Future 被注释的元素必须是一个将来的日期

验证请求体(RequestBody)

只需要在请求处理方法中需要验证的参数前加上 @Valid 注解就会开启校验了,如果验证失败将抛出异常:MethodArgumentNotValidException

6.2  @Validated

如果你的入参不是用一个 Java 对象来接收的话,比如用 @PathVariables 和 @RequestParam 注解来获取入参,这种情况下要校验参数不要忘记在类的头上加 @Validated 注解,这个参数可以告诉 Spring 去校验方法参数。

七、统一异常处理注解

异常处理通常也是我们在开发中一定要做的,因为不可能将一些程序员才能看懂的异常抛出到前端去(总会有不靠谱的同事忘记捕获异常的),所以一般都会加上统一的异常处理,在对用户不友好的错误堆栈转换为普通用户可以看懂的文案提示。

这里涉及到的注解只有两个:

  1. @ControllerAdvice : 定义全局异常处理类,包含 @Component 所以可以被 Spring 扫描到。

  2. @ExceptionHandler : 声明异常处理方法,表示遇到这个异常,就执行标注的方法。

八、JPA数据持久化注解

上面是百度百科给的概念,只能说在实际项目开发中还是用的不多,大家还是喜欢用 Mybatis,不过相比更加简洁的技术还是要学习下的。

创建表
  • @Entity

  • @Table

这俩是放在 Java Bean 上面用来标注数据库实体对象和表明之间的映射关系的。

创建主键
  • @Id

  • @GeneratedValue

这俩主键放在 Bean 的字段上,用来标识数据库的主键以及主键自动生成的。通过 @GeneratedValue直接使用 JPA 内置提供的四种主键生成策略来指定。

  • GenerationType.TABLE 持久化引擎通过关系数据库的一张特定的表格来生成主键;

  • GenerationType.SEQUENCE 随机序列;

  • GenerationType.IDENTITY 主键自增长;

  • GenerationType.AUTO 持久化引擎会根据数据库在以上三种主键生成策略中选择,默认选择的就是这个策略;

设置字段类型

@Column 声明字段。

比如:Java Bean 属性名为 nickName 对应的数据库字段名为 user_name,长度为 32,非空。

设置字段类型并且加默认值,这个还是挺常用的。

指定不持久化特定字段

@Transient :有一些字段我们有时间不需要落库,就可以加上这个注解就好了。

@声明事务

这个注解可以作用于类上,也可以作用于方法上。前者表示所有该类的 public 方法都配置相同的事务属性信息,后者表示当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息。

Exception 分为运行时异常 RuntimeException 和非运行时异常。在 @Transactional 注解中如果不配置 rollbackFor 属性,那么事物只会在遇到 RuntimeException 的时候才会回滚,加上 rollbackFor=Exception.class ,可以让事物在遇到非运行时异常时也回滚。

九、 JSON格式处理注解

9.1  指定过滤字段

  • @JsonIgnoreProperties 作用在类上用于过滤掉特定字段不返回或者不解析。

  • @JsonIgnore一般用于类的属性上,作用和上面的@JsonIgnoreProperties 一样。

9.2  格式化 json 数据

要注意的是,它只会在类似 @ResponseBody 返回 json 数据的时候,才会返回格式化的 yyyy-MM-dd HH:mm:ss 时间,你直接使用System.out.println()输出的话,仍然是类似 Fri Dec 01 21:05:20 CST 2017 这样的时间样式。

9.3  扁平化对象

@JsonUnwrapped

这个可能不太好说,大家直接看代码就懂了:

未扁平化之前:

使用 @JsonUnwrapped 扁平对象之后:

十、测试处理注解

@ActiveProfiles一般作用于测试类上, 用于声明生效的 Spring 配置文件。

@Test声明一个方法为测试方法。

@Transactional被声明的测试方法执行后数据会被回滚,避免污染测试数据。

@WithMockUser Spring Security 提供的,用来模拟一个真实用户,并且可以赋予权限。

十一、配置启动注解

@SpringBootApplication : 等价于使用 @Configuration、@EnableAutoConfiguration、@ComponentScan  三个注解。

@Configuration:声明是是一个 Java 形式的配置类,Spring Boot 提倡基于 Java 的配置,相当于你之前在 xml 中配置 bean;

@EnableAutoConfiguration:类级别的注解,这个注解告诉 Spring Boot 根据添加的 jar 依赖猜测你想如何配置 Spring,也就是 Spring 实现自动配置的开关。

@ComponentScan:标注哪些路径下的类需要被Spring扫描。

@Conditional:Spring4 新提供的注解,通过 @Conditional 注解可以根据代码中设置的条件装载不同的 bean,也是SpringBoot实现自动配置的基石。

Spring Boot 源码中大量扩展了 @Condition 注解,用于实现智能的自动化配置,满足各种使用场景。下面我给大家列举下:

  • @ConditionalOnBean :配置了某个特定的Bean时条件为真。

  • @ConditionalOnMissingBean :没有配置特定的Bean时条件为真。

  • @ConditionalOnClass:Classpath里有指定的类时条件为真。

  • @ConditionalOnMissingClass:Classpath里没有指定的类时条件为真。

  • @ConditionalOnExpression:给定的SpEL表达式计算结果为true。

  • @ConditionalOnJava:Java的版本匹配特定值或者一个范围值。

  • @ConditionalOnJndi:参数中给定的 JNDI 位置必须存在一个,如果没有给参数,则要有 JNDI InitialContext。

  • @ConditionalOnProperty:指定的配置属性要有一个明确的值。

  • @ConditionalOnResource:Classpath里没有指定的资源。

  • @ConditionalOnWebApplication:这是一个Web应用程序。

  • @ConditionalOnNotWebApplication:这不是一个Web应用程序。

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

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

相关文章

java中BigDecimal的介绍及使用(二)

系列文章目录 java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题java中BigDecimal的介绍及使用(二) 文章目录 系列文章目录一、前言二、BigDecimal提供的方法2.1、stripTrailingZeros() 去除小数尾部所有的02.2、int signum()2.3、int…

JAVA爬虫2 - Jsoup解析、对接MySQL、多线程爬虫、json库使用

官网:https://jsoup.org/download Jsoup是一款基于Java的HTML解析器,它可以方便地从网页中抓取和解析数据。它的主要作用是帮助开 发者处理HTML文档,提取所需的数据或信息。下面介绍几个常用的API: 选择器(Selector)API:用于根据CSS选择器语法选择HTML元素。 属性(Attribute…

短视频变表情包gif怎么做?这一招最好用

Gif动态表情包是一种有效的表达感情的方式。可以通过添加图像、文字等更加直观的传递情感和信息。在各种聊天软件中gif动态表情包也是非常收欢迎的。当我们看到一段视频想要将其制作成gif动态表情包的时候要怎么操作呢?教大家使用在线制作gif(https://ww…

编写自己的CA和TA与逆向

参考内容《手机安全和可信应用开发》 https://note.youdao.com/s/MTlG4c1w 介绍 TA的全称是Trust Application, 即可信任应用程序。 CA的全称是Client Applicant, 即客户端应用程序。 TA运行在OP-TEE的用户空间, CA运行在REE侧。 CA执行时代…

Faster R-CNN源码解析(三)

目录 todaytorch.meshgrid()函数 today 今天我们主要来捋一捋AnchorsGenerator这部分代码,对应在network_files文件夹中的rpn_function文件中,从RegionProposalNetwork()类的forward()函数开始看,首先会进入head部分也就是我们看到的RPNHead部分,也就是…

SVD 最小二乘法解 亲测ok!

线性最小二乘问题 m个方程求解n个未知数&#xff0c;有三种情况&#xff1a; mn且A为非奇异&#xff0c;则有唯一解&#xff0c;xA.inverse()*bm>n&#xff0c;约束的个数大于未知数的个数&#xff0c;称为超定问题&#xff08;overdetermined&#xff09;m<n&#xff0…

2023.11.22 IDEA Spring Boot 项目热部署

目录 引言 操作步骤 1. 在 pom.xml 中添加热部署框架支持 2. Setting 开启项目自动编译 3. 以后创建的新项目进行同步配置 4. 重复 配置 步骤2 的内容 5. 开启运行中的热部署 引言 Spring Boot 的热部署是一种在项目正在运行的时候修改代码&#xff0c;却不需要重新启动…

数字孪生农村供水工程平台:为乡村振兴注入新活力

随着科技的不断进步&#xff0c;数字孪生技术逐渐成为各行业创新发展的重要驱动力。在水利领域&#xff0c;数字孪生农村供水平台以其独特的优势&#xff0c;为农村供水系统带来了革命性的变革。本文将为您详细介绍数字孪生农村供水平台的核心特点及优势&#xff0c;带您领略智…

【软件测试】技术不好?不学这几招你怎么跳槽?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、软件测试面试环…

解决DaemonSet没法调度到master节点的问题

最近在kubernetes部署一个springcloud微服务项目&#xff0c;到了最后一步部署边缘路由&#xff1a;使用nginx-ingress和traefik都可以&#xff0c;必须使用DaemonSet部署&#xff0c;但是发现三个节点&#xff0c;却总共只有两个pod。 换句话说&#xff0c; DaemonSet没法调度…

Google搜索广告图标详解

Google搜索广告图标是指在Google搜索结果页面中&#xff0c;广告结果前面显示的小图标。这些图标旨在帮助用户更容易地识别哪些结果是广告&#xff0c;并提供更直观的搜索体验。本文小编将对于Google搜索广告图标的类型、作用和设计原则进行介绍。 一、Google搜索广告图标的类型…

化学仿制药参比制剂目录-参比制剂查询网站

2015年以前&#xff0c;参比制剂对于仿制药的研究无关紧要&#xff0c;但推出了’仿制药一致性评价’后&#xff0c;参比制剂的选择成为了决定仿制药成功与否的关键因素&#xff0c;如今在进行仿制药研究时&#xff0c;首要任务就是确定仿制目标&#xff0c;也就是参比制剂。 …

PLC通过lora网关采集温室大棚温湿度数据

概述: 运用lora网关远程控制大棚内风机&#xff0c;日光灯&#xff0c;温湿度传感器等设备。可以实现远程获取现场环境的空气温湿度、土壤水分温度、二氧化碳浓度、光照强度可以自动控制温室湿帘风机、喷淋滴灌、加温补光等设备&#xff0c;并向远程计算机端推送实时数据&…

linux删除oracle数据库:如何在Linux系统中删除Oracle数据库

停止Oracle数据库服务&#xff1a;# su - oracle 1. 停止Oracle数据库服务&#xff1a; # su - oracle $ sqlplus / as sysdba SQL> SHUTDOWN IMMEDIATE; 2. 删除oracle安装目录&#xff1a; # rm -rf /u01/app/oracle 3. 删除oracle用户和组&#xff1a; # userdel…

关于前端上传

类似于 上面的传参form-data形式&#xff0c;第一个参数为上传的文件&#xff0c;第二个参数为json格式

企业建数仓的第一步是选择一个好用的ETL工具

当企业决定建立数据仓库&#xff08;Data Warehouse&#xff09;&#xff0c;第一步就是选择一款优秀的ETL&#xff08;Extract, Transform, Load&#xff09;工具。数据仓库是企业数据管理的核心&#xff0c;它存储、整合并管理各种数据&#xff0c;为商业决策和数据分析提供支…

【计算方法与科学建模】矩阵特征值与特征向量的计算(一):Jacobi 旋转法及其Python实现

文章目录 一、Jacobi 旋转法1. 基本思想2. 计算过程演示3. 注意事项 二、Python实现迭代过程&#xff08;调试&#xff09; 矩阵的特征值&#xff08;eigenvalue&#xff09;和特征向量&#xff08;eigenvector&#xff09;在很多应用中都具有重要的数学和物理意义。Jacobi 旋转…

技术细分|推荐系统——推荐系统中的偏差

一、背景 推荐系统中大量使用用户行为数据&#xff0c;作为系统学习的标签或者说信号。但用户行为数据天生存在各式各样的偏差&#xff08;bias&#xff09;&#xff0c;如果直接作为信号的话&#xff0c;学习出的模型参数不能准确表征用户在推荐系统中的真实行为意图&#xff…

知虾:揭秘Shopee大数据采集及分析平台的全方位运营利器

Shopee是如今备受瞩目的电商平台之一&#xff0c;而要在这个竞争激烈的市场中脱颖而出&#xff0c;了解市场趋势、选择畅销商品、分析竞争对手等是至关重要的。这就是为什么Shopee推出了知虾&#xff0c;一个强大的大数据采集及分析平台。本文将详细介绍知虾的功能和优势&#…