龙空技术网

SpringBoot开发常用注解大全

后端研发Marion 3857

前言:

如今同学们对“lobhandlermysql”大概比较关怀,看官们都需要了解一些“lobhandlermysql”的相关知识。那么小编同时在网上网罗了一些有关“lobhandlermysql””的相关知识,希望姐妹们能喜欢,大家快快来学习一下吧!

目录

一、核心注解

二、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注解最全详解(整合超详细版本)]()

- [Spring Boot进阶教程——注解大全(建议收藏!)]()

- [接近8000字的Spring/SpringBoot常用注解总结!安排!]()

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

- [【Spring Boot学习总结】13.Spring Boot事务控制]()

标签: #lobhandlermysql