百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

SpringBoot开发常用注解大全 springboot常用的注解有哪些

liebian365 2024-10-19 07:57 28 浏览 0 评论

目录

一、核心注解

二、JPA注解

三、SpringMVC

四、AOP注解

五、事务注解@Transactional

六、SpringScheduling注解

七、线程池注解(待更新)

八、集成三方库注解


# SpringBoot开发常用注解大全

## 一、核心注解

### 1. @SpringBootApplication

@SpringBootApplication是Spring Boot项目的核心注解,目的是开启自动配置

- 1. @Configuration

- 2. @EnableAutoConfiguration

- 可以根据classpath中的jar依赖,自动注册bean,一般用于类或接口上,它尝试根据您添加的jar依赖项自动配置Spring应用程序。自动载入应用程序所需的所有Bean——这依赖于Spring Boot在类路径中的查找。

- 3. @ComponentScan

### 2. @Autowired

- 2.1 简介

- @Autowired是一种注解,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作,@Autowired标注可以放在成员变量上,也可以放在成员变量的set方法上,也可以放在任意方法上表示,自动执行当前方法,如果方法有参数,会在IOC容器中自动寻找同类型参数为其传值。

这里必须明确:@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier使用;

- 2.2 三种注入方式

  • - 1. 构造器注入
  • - 2. setter方法注入
  • - 3. field反射注入

- 2.3 原理

- 2.4 常见问题

  • - 1. 加载同类型问题
  • - 2. 循环依赖问题

### 3. @Qualifier

- 如果容器中有多个相同类型的bean,则框架将抛出NoUniqueBeanDefinitionException, 以提示有多个满足条件的bean进行自动装配。程序无法正确做出判断使用哪一个,通过将@Qualifier注解与我们想要使用的特定Spring bean的名称一起进行装配,Spring框架就能从多个相同类型并满足装配要求的bean中找到我们想要的

### 4. @Bean

- @Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。

### 5. @Required

- @Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个

BeanInitializationException 异常。

### 6. @Value

- @Value将外部的值动态注入到Bean中。"注入外部的值"可以有很多种,它可以注入普通字符串、注入java 系统变量、注入表达式结果、注入其他Bean属性、将配置文件 *.properties 或 *. yml 李 配置的 属性 注入、注入文件资源和注入url资源等。

### 7. @DependsOn

- Spring容器载入bean顺序是不确定的,Spring框架也没有约定特定载入顺序逻辑规范。@DependsOn注解可以定义在类和方法上,比如说A组件要依赖于B组件,那就是B组件需要比A组件先注册到IOC容器中。

### 8. @Lazy

- @Lazy注解用于标识bean是否需要延迟加载。Spring IoC容器一般都会在启动的时候实例化所有单实例bean,如果想要Spring在启动的时候延迟加载A,即在调用B的时候再去初始化,则可以使用@Lazy注解。

### 9. @Lookup

- @Lookup的注解是一个作用在方法上的注解,被其标注的方法会被重写,然后根据其返回值的类型,容器调用BeanFactory的getBean()方法来返回一个bean。

### 10 .@Primary

- @Primary与@Qualifier类似,都是解决@Autowired时容器中有多个相同类型bean的问题,Primary可以理解为默认优先选择,同时不可以同时设置多个。

### 11. @Scope

- @Scope注解是springIoc容器中的一个作用域,在 Spring IoC 容器中具有以下几种作用域:基本作用域singleton(单例)(默认作用域)、prototype(多例),Web 作用域(reqeust、session、globalsession),自定义作用域

  • - 1. singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
  • - 2. prototype : 每次请求都会创建一个新的 bean 实例。
  • - 3. request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
  • - 4. session : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

### 12. @Profile

- @profile注解的作用是为了应对多环境开发,比如开发环境使用dev, 生产环境使用prod,就可以使用@Profile注解实现不同的开发环境使用不同的数据源。spring3.2之前 @Profile注解用在类上,spring3.2 之后 @Profile注解用在方法上

### 13. @Import

- @Import用于注入指定的类,导入组件id默认是组件的全类名。

### 14. @ImportResource

- @ImportResource注解用于导入Spring的配置文件,让配置文件里面的内容生效;(就是以前写的springmvc.xml、applicationContext.xml)

### 15. @PropertySource

- @PropertySource注解加载指定的配置文件

### 16. @PropertySources

- @PropertySources顾名思义就是可以指定多个@PropertySource来导入配置文件。

### 17. @Component

- 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

### 18. @Service

- 作用及范围:一般用于service层的注解,继承了Component组件,本质上一样,方便做业务范围区分而已。

## 二、JPA注解

### 1. @Entity

- 声明一个类对应一个数据库实体。

### 2. @Table

- 设置表名

### 3. @Id

- 1. 声明一个字段为主键。

- 2. @GeneratedValue 指定主键生成策略。

  • - 1. GenerationType. TABLE
  • - 使用一个特定的数据库表格来保存主键
  • 持久化引擎通过关系数据库的一张特定的表格来生成主键
  • - 2. GenerationType. SEQUENCE
  • - 在某些数据库中,不支持主键自增长,比如Oracle、PostgreSQL其提供了一种叫做"序列(sequence)"的机制生成主键
  • - 3. GenerationType. IDENTITY
  • - 主键自增长
  • - 4. GenerationType.AUTO(默认)
  • - 把主键生成策略交给持久化引擎(persistence engine),持久化引擎会根据数据库在以上三种主键生成 策略中选择其中一种

- 3. JPA提供的主键生成策略

- 4. 分布式ID问题

### 4. @Column

- 声明字段

### 5. @Transient

- 指定不持久化特定字段

### 6. @Lob

- 声明某个字段为大字段。

### 7. @Enumerated

- 可以使用枚举类型的字段,不过枚举字段要用@Enumerated注解修饰。

### 8. @EnableJpaAuditing

- 开启 JPA 审计功能

### 9. @Modifying

- 注解提示 JPA 该操作是修改操作,注意还要配合@Transactional注解使用。

### 10. 关联关系

- @OneToOne 声明一对一关系

- @OneToMany 声明一对多关系

- @ManyToOne声明多对一关系

- @MangToMang声明多对多关系

### 11. @DynamicInsert

- 1. 设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句中,默认false。

- 2. 比如希望数据库插入日期或时间戳字段时,在对象字段为空定的情况下,表字段能自动填写当前的sysdate。

### 12. @DynamicUpdate

- 1. 设置为true,表示update对象的时候,生成动态的update语句,如果这个字段的值是null就不会被加入到update语句中,默认false。

- 2. 比如只想更新某个属性,但是却把整个属性都更改了,这并不是我们希望的结果,我们希望的结果是:我更改了哪写字段,只要更新我修改的字段就够了。

### 13. @MappedSuperclass

- 1. @MappedSuperclass 注解使用在父类上面,是用来标识父类的

- 2. @MappedSuperclass 标识的类表示其不能映射到数据库表,因为其不是一个完整的实体类,但是它所拥有的属性能够映射在其子类对用的数据库表中

- 3. @MappedSuperclass 标识的类不能再有@Entity或@Table注解

### 14. @Repository

- 使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

## 三、SpringMVC

### 1. @Controller

- @Controller用于标记在一个类上,使用它标记的类就是一个SpringMvc Controller对象,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。

### 2. @RestController

- @RestController在Spring中的作用等同于@Controller + @ResponseBody。

### 3. @RequestBody

- @RequestBody主要用来接收前端传递给后端的json字符串中的数据的。

### 4. @ResponseBody

- @ResponseBody将controller里方法返回的对象通过适当的转换器转换为Json写入到response对象的body区.

### 5. @PathVariable

- @PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值

### 6. @RequestParam

- @RequestParam将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)

### 7. @RequestMapping

- @RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。也就是通过它来指定控制器可以处理哪些URL请求。

### 8. @GetMapping

- @GetMapping注释将Http GET请求映射到特定的处理程序方法。 它是一个组合的注释,@RequestMapping(method = RequestMethod.GET)的快捷方式。

### 9. @PostMapping

- @PostMapping注释将HTTP POST请求映射到特定的处理程序方法。 它是一个组合的注释,@RequestMapping(method = RequestMethod.POST)的快捷方式。

### 10. @ControllerAdvice

- @ControllerAdvice增强型控制器,对于控制器的全局配置放在同一个位置。可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,可处理全局异常处理、全局数据绑定和全局数据预处理。

### 11. @ExceptionHandler

- @ExceptionHandler统一处理某一类异常,从而能够减少代码重复率和复杂度。

### 12. @InitBinder

- @InitBinder只在@Controller中注解方法来为这个控制器注册一个绑定器初始化方法,方法只对本控制器有效。

### 13. @ModelAttribute

- @ModelAttribute注解用于将方法的参数或方法的返回值绑定到指定的模型属性上,并返回给Web视图。

### 14. @CrossOrigin

- @CrossOrigin支持跨域,可用于Controller上,也可用于方法上。

## 四、AOP注解

### Spring AOP代理类

- 1. CglibAopProxy

垃圾回收类库提供的代理类。

上图就是以CglibAopProxy为例,需要调用其内部类的 DynamicAdvisedInterceptor 的 intercept 方法来进行代理。

- 2. JdkDynamicAopProxy

JDK提供的代理类。

需要调用其 invoke 方法来进行代理。

### 2.1 @Aspect

- 作用及范围:切面注解,切面编程经常用到的,可以做日志

### 2.2 @After

- 作用及范围:配置Aspect做切面使用,在方法执行之后执行(方法上)

### 2.3 @Before

- 作用及范围:配置Aspect做切面使用,在方法执行之前执行(方法上)

### 2.4 @Around

- 作用及范围:配置Aspect做切面使用,在方法执行之前与之后执行(方法上)

### 2.5 @PointCut

- 作用及范围:配置Aspect做切面使用,声明切点

## 五、事务注解@Transactional

### 1. @Transactional的使用

- @Transactional不仅可以注解在方法上,也可以注解在类上。当注解在类上的时候意味着此类的所有public方法都是开启事务的。如果类级别和方法级别同时使用了@Transactional注解,则

使用在类级别的注解会重载方法级别的注解。

### 2. 隔离级别@Transactional(isolation = Isolation.DEFAULT)

- 1. DEFAULT :这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是: READ_COMMITTED 。

- 2. READ_UNCOMMITTED :该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。

- 3. READ_COMMITTED :该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。

- 4. REPEATABLE_READ :该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。

- 5. SERIALIZABLE :所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

### 3. 传播行为@Transactional(propagation = Propagation.REQUIRED)

- 1. REQUIRED :如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

- 2. SUPPORTS :如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

- 3. MANDATORY :如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

- 4. REQUIRES_NEW :创建一个新的事务,如果当前存在事务,则把当前事务挂起。

- 5. NOT_SUPPORTED :以非事务方式运行,如果当前存在事务,则把当前事务挂起。

- 6. NEVER :以非事务方式运行,如果当前存在事务,则抛出异常。

- 7. NESTED :如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 REQUIRED 。

### 4. @Transactional注解实现原理剖析

- 使用@Transactional注解对某目标方法进行标注时,Spring会使用AOP代理,生成一个代理对象,该对象会根据@Transactional注解的属性配置信息,来决定是否使用TransactionInterceptor拦截器来进行

拦截。如果该方法需要使用事务控制,则需要使用TransactionInterceptor事务拦截器,对该方法进行拦截,在该目标方法执行之前创建并开启事务,然后执行目标方法,最后在目标方法执行完毕后,

根据执行情况是否出现异常,利用抽象事务管理器AbstractPlatformTransactionManager操作数据源DataSource提交或回滚事务:

### 5. 常见问题

- 1. 事务失效的情况

- 2. 嵌套事务顺序问题

## 六、SpringScheduling注解

### 1. @Scheduled

- @Scheduled可以作为一个触发源添加到一个方法中。

### 2. @EnableScheduling

- @EnableScheduling 在配置类上使用,开启计划任务的支持(类上)。

### 3. @Async

- @Async标注的方法,称之为异步方法;这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。有时候我们会调用一些特殊的任务,任务会比较耗时,重要的是,我们不管他返回的后果。这时候我们就需要用这类的异步任务啦。

### 4. @EnableAsync

- @EnableAsync注解启用了Spring异步方法执行功能

### 5. @Schedules

- @Schedules作用跟@Scheduled一样,@Schedules内部包含多个@Scheduled注解,可以表示一个方法可以存在多个调度设置。

## 七、线程池注解(待更新)

## 八、集成三方库注解

### 1. Lombok

- 1. @Data

- 注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法

- 2. @Setter

- 注解在属性上;为属性提供 setting 方法

- 3. @Getter

- 注解在属性上;为属性提供 getting 方法

- 4. @NoArgsConstructor

- 注解在类上;为类提供一个无参的构造方法

- 5. @AllArgsConstructor

- 注解在类上;为类提供一个全参的构造方法

- 6. @EqualsAndHashCode

- 默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。

- 7. @toString

- 生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。

### 2. MySQL(待更新)

### 3. Redis(待更新)

### 4. Kafka(待更新)

### 5. RabbitMQ(待更新)

### 6. MongoDB(待更新)

### 7. ElasticSearch(待更新)

## 参考资料

- [SpringBoot注解最全详解(整合超详细版本)](https://blog.csdn.net/weixin_40753536/article/details/81285046)

- [Spring Boot进阶教程——注解大全(建议收藏!)](https://www.toutiao.com/i6894998939787854350)

- [接近8000字的Spring/SpringBoot常用注解总结!安排!](https://www.toutiao.com/i6818828234700882436)

- [springboot2.2.X手册:36个注解详细解析,一目了然](https://www.toutiao.com/i6823649625178636803)

- [【Spring Boot学习总结】13.Spring Boot事务控制](https://blog.csdn.net/acmman/article/details/82926410)

相关推荐

精品博文嵌入式6410中蓝牙的使用

BluetoothUSB适配器拥有一个BluetoothCSR芯片组,并使用USB传输器来传输HCI数据分组。因此,LinuxUSB层、BlueZUSB传输器驱动程序以及B...

win10跟这台计算机连接的前一个usb设备工作不正常怎么办?

前几天小编闲来无事就跑到网站底下查看粉丝朋友给小编我留言询问的问题,还真的就给小编看到一个问题,那就是win10跟这台计算机连接的一个usb设备运行不正常怎么办,其实这个问题的解决方法时十分简单的,接...

制作成本上千元的键盘,厉害在哪?

这是稚晖君亲自写的开源资料!下方超长超详细教程预警!!全文导航:项目简介、项目原理说明、硬件说明、软件说明项目简介瀚文智能键盘是一把我为自己设计的——多功能、模块化机械键盘。键盘使用模块化设计。左侧的...

E-Marker芯片,USB数据线的“性能中枢”?

根据线缆行业的研究数据,在2019年搭载Type-C接口的设备出货量已达到20亿台,其中80%的笔记本电脑和台式电脑采用Type-C接口,50%的智能手机和平板电脑也使用Type-C接口。我们都知道,...

ZQWL-USBCANFD二次开发通讯协议V1.04

修订历史:1.功能介绍1.1型号说明本文档适用以下型号:  ZQWL-CAN(FD)系列产品,USB通讯采用CDC类实现,可以在PC机上虚拟出一个串口,串口参数N,8,1格式,波特率可以根据需要设置(...

win10系统无法识别usb设备怎么办(win10不能识别usb)

从驱动入手,那么win10系统无法识别usb设备怎么办呢?今天就为大家分享win10系统无法识别usb设备的解决方法。1、右键选择设备管理器,如图:  2、点击更新驱动程序,如图:  3、选择浏览...

微软七月Win8.1可选补丁有内涵,含大量修复

IT之家(www.ithome.com):微软七月Win8.1可选补丁有内涵,含大量修复昨日,微软如期为Win7、Win8.1发布7月份安全更新,累计为6枚安全补丁,分别修复总计29枚安全漏洞,其中2...

如何从零开始做一个 USB 键盘?(怎么制作usb)

分两种情况:1、做一个真正的USB键盘,这种设计基本上不涉及大量的软件编码。2、做一个模拟的USB键盘,实际上可以没有按键功能,这种的需要考虑大量的软件编码,实际上是一个单片机。第一种设计:买现成的U...

电脑识别U盘失败?5个实用小技巧,让你轻松搞定USB识别难题

电脑识别U盘失败?5个实用小技巧,让你轻松搞定USB识别难题注意:有些方法会清除USB设备里的数据,请谨慎操作,如果不想丢失数据,可以先连接到其他电脑,看能否将数据复制出来,或者用一些数据恢复软件去扫...

未知usb设备设备描述符请求失败怎么解决

出现未知daousb设备设备描述符请求失du败解决办zhi法如下:1、按下Windows+R打开【运行】;2、在版本运行的权限输入框中输入:services.msc按下回车键打开【服务】;2、在服务...

读《飘》47章20(飘每章概括)

AndAhwouldn'tleaveMissEllen'sgrandchildrenfornotrashystep-patobringup,never.Here,Ah...

英翻中 消失的过去 37(消失的英文怎么说?)

翻译(三十七):消失的过去/茱迪o皮考特VanishingActs/JodiPicoult”我能做什么?“直到听到了狄利亚轻柔的声音,我才意识到她已经在厨房里站了好一会儿了。当她说话的时候,...

RabbitMQ 延迟消息实战(rabbitmq如何保证消息不被重复消费)

现实生活中有一些场景需要延迟或在特定时间发送消息,例如智能热水器需要30分钟后打开,未支付的订单或发送短信、电子邮件和推送通知下午2:00开始的促销活动。RabbitMQ本身没有直接支持延迟...

Java对象拷贝原理剖析及最佳实践(java对象拷贝方法)

作者:宁海翔1前言对象拷贝,是我们在开发过程中,绕不开的过程,既存在于Po、Dto、Do、Vo各个表现层数据的转换,也存在于系统交互如序列化、反序列化。Java对象拷贝分为深拷贝和浅拷贝,目前常用的...

如何将 Qt 3D 渲染与 Qt Quick 2D 元素结合创建太阳系行星元素?

Qt组件推荐:QtitanRibbon:遵循MicrosoftRibbonUIParadigmforQt技术的RibbonUI组件,致力于为Windows、Linux和MacOSX提...

取消回复欢迎 发表评论: