SpringBoot注解详解:从核心到Web,从数据到测试,一网打尽

2023-11-09

总结的了平时学习springboot常用的一些注解,方便以后开发时可以阅览回忆

springboot的常用注解可以分为以下几类:

  • 核心注解:这些注解是springboot的基础,用于启动、配置和管理springboot应用。
  • Web MVC注解:这些注解是基于spring MVC框架的,用于处理Web请求和响应。
  • 数据访问注解:这些注解是基于spring data框架的,用于操作数据库和缓存。
  • 测试注解:这些注解是基于spring test框架的,用于编写和运行单元测试和集成测试。

下面分别介绍这些注解的具体含义和用法。


目录

一、核心注解

1、@SpringBootApplication

2、@SpringBootConfiguration

3、@EnableAutoConfiguration

4、@ComponentScan

5、@Component

6、@Configuration

7、@Bean

8、@Import

9、@ImportResource

10、@Autowired

二、Web MVC注解

1、@Controller

2、@RestController

3、@RequestMapping

4、@GetMapping

5、@PostMapping

三、数据访问注解

1、@Repository

2、@JpaRepository

3、@Query

4、@Param

5、@Modifying

6、@Transactional

7、@Cacheable

四、测试注解

1、@SpringBootTest

2、@RunWith

3、@Test

4、@Before

5、@After

6、@BeforeClass

7、@AfterClass

8、@MockBean

9、@SpyBean

总结


一、核心注解

1、@SpringBootApplication

这是springboot最核心的注解,用在主类上,表示这是一个springboot应用,它包含了以下三个注解:

  • @Configuration:表示这是一个配置类,相当于传统的XML配置文件,可以使用@Bean注解定义需要注册到spring容器中的bean。
  • @EnableAutoConfiguration:表示启用自动配置,根据当前类路径下的依赖包,自动配置合适的bean,如数据库连接池、事务管理器、Web服务器等。
  • @ComponentScan:表示扫描当前包及其子包下的所有组件,并注册为bean,如控制器、服务、仓库等。

2、@SpringBootConfiguration

这是一个组合注解,相当于@Configuration和@EnableAutoConfiguration的结合。它可以用在主类上,也可以用在其他配置类上,表示这是一个springboot配置类。

3、@EnableAutoConfiguration

这是一个组合注解,相当于@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)的结合。它可以用在主类上,也可以用在其他配置类上,表示启用自动配置。它会根据当前类路径下的依赖包,自动导入对应的自动配置类,并注册相关的bean。如果不想使用某些自动配置类,可以使用exclude或excludeName属性进行排除。

4、@ComponentScan

这是一个组合注解,相当于@Retention(RetentionPolicy.RUNTIME)、@Target(ElementType.TYPE)、@Documented、@Inherited和@Repeatable(ComponentScans.class)的结合。它可以用在主类上,也可以用在其他配置类上,表示扫描指定包下的所有组件,并注册为bean。它有以下几个属性:

  • value或basePackages:指定要扫描的包名或包名数组。
  • basePackageClasses:指定要扫描的包含组件的类或类数组。
  • includeFilters:指定要包含的过滤器或过滤器数组。
  • excludeFilters:指定要排除的过滤器或过滤器数组。
  • lazyInit:指定是否延迟初始化bean,默认为false。
  • nameGenerator:指定bean名称生成器,默认为AnnotationBeanNameGenerator。
  • scopeResolver:指定bean作用域解析器,默认为AnnotationScopeMetadataResolver。
  • scopedProxy:指定是否使用代理创建作用域bean,默认为ScopedProxyMode.DEFAULT。
  • resourcePattern:指定要扫描的资源模式,默认为"**/*.class"。
  • useDefaultFilters:指定是否使用默认的过滤器,默认为true。

5、@Component

这是一个通用的注解,表示这是一个组件,可以被spring容器扫描和管理。它可以用在任何类上,也可以作为其他注解的元注解,如@Controller、@Service、@Repository等。

6、@Configuration

这是一个组合注解,相当于@Component和@Scope(“singleton”)的结合。它表示这是一个配置类,可以使用@Bean注解定义需要注册到spring容器中的bean。它可以用在任何类上,也可以作为其他注解的元注解,如@SpringBootConfiguration等。

7、@Bean

这是一个方法级别的注解,表示该方法返回的对象是一个bean,需要注册到spring容器中。它只能用在被@Configuration或@Component等注解标记的类中。它有以下几个属性:

  • name或value:指定bean的名称或名称数组,默认为方法名。
  • initMethod:指定bean的初始化方法名,默认为空。
  • destroyMethod:指定bean的销毁方法名,默认为"(inferred)",表示自动推断。
  • autowire:指定bean的自动装配模式,默认为Autowire.NO。
  • autowireCandidate:指定bean是否是自动装配候选者,默认为true。
  • primary:指定bean是否是首选候选者,默认为false。

8、@Import

这是一个类级别的注解,表示导入其他配置类或组件类,并注册为bean12。它可以用在任何类上,也可以作为其他注解的元注解,如@EnableAutoConfiguration等。它有以下几种用法:

  • @Import(Class<?>…):导入一个或多个配置类或组件类,并注册为bean。
  • @Import(ImportSelector.class):导入一个实现了ImportSelector接口的类,并根据其返回值导入对应的配置类或组件类,并注册为bean。
  • @Import(ImportBeanDefinitionRegistrar.class):导入一个实现了ImportBeanDefinitionRegistrar接口的类,并根据其逻辑注册对应的bean定义。

9、@ImportResource

这是一个类级别的注解,表示导入一个或多个XML配置文件,并将其中定义的bean注册到spring容器中12。它可以用在任何类上,也可以作为其他注解的元注解。它有以下两个属性:

  • value或locations:指定要导入的XML配置文件的路径或路径数组。
  • reader:指定用于读取XML配置文件的BeanDefinitionReader实现类,默认为XmlBeanDefinitionReader。

10、@Autowired

这是一个字段级别或方法级别的注解,表示自动装配依赖的bean12。它可以用在任何字段或方法上,也可以作为其他注解的元注解。它有以下两个属性:

  • required:指定依赖的bean是否必须存在,默认为true。
  • value:指定依赖的bean的名称,默认为空。

二、Web MVC注解

1、@Controller

这是一个组合注解,相当于@Component和@ControllerAdvice的结合 。它表示这是一个控制器类,可以处理Web请求,并返回视图或数据。它可以用在任何类上,也可以作为其他注解的元注解,如@RestController等。

2、@RestController

这是一个组合注解,相当于@Controller和@ResponseBody的结合 。它表示这是一个REST风格的控制器类,可以处理Web请求,并返回JSON或XML格式的数据。它可以用在任何类上,也可以作为其他注解的元注解。

3、@RequestMapping

这是一个类级别或方法级别的注解,表示映射Web请求到对应的处理方法 。它可以用在任何类或方法上,也可以作为其他注解的元注解,如@GetMapping、@PostMapping等。它有以下几个属性:

  • value或path:指定要映射的请求路径或路径数组。
  • method:指定要映射的请求方法或方法数组,如GET、POST等。
  • params:指定要映射的请求参数或参数数组,如"username"、"age!=10"等。
  • headers:指定要映射的请求头或头数组,如"Accept=application/json"、"Content-Type=text/plain"等。
  • consumes:指定要映射的请求内容类型或类型数组,如"application/json"、"text/plain"等。
  • produces:指定要映射的响应内容类型或类型数组,如"application/json"、"text/plain"等。
  • name:指定映射的名称,默认为空。

4、@GetMapping

这是一个组合注解,相当于@RequestMapping(method = RequestMethod.GET)的结合 。它表示映射GET请求到对应的处理方法。它可以用在任何方法上,也可以作为其他注解的元注解。它有以下几个属性:

  • value或path:指定要映射的请求路径或路径数组。
  • params:指定要映射的请求参数或参数数组。
  • headers:指定要映射的请求头或头数组。
  • consumes:指定要映射的请求内容类型或类型数组。
  • produces:指定要映射的响应内容类型或类型数组。
  • name:指定映射的名称,默认为空。

5、@PostMapping

这是一个组合注解,相当于@RequestMapping(method = RequestMethod.POST)的结合 。它表示映射POST请求到对应的处理方法。它可以用在任何方法上,也可以作为其他注解的元注解。它有以下几个属性:

  • value或path:指定要映射的请求路径或路径数组。
  • params:指定要映射的请求参数或参数数组。
  • headers:指定要映射的请求头或头数组。
  • consumes:指定要映射的请求内容类型或类型数组。
  • produces:指定要映射的响应内容类型或类型数组。
  • name:指定映射的名称,默认为空。

三、数据访问注解

1、@Repository

这是一个组合注解,相当于@Component和@RepositoryDefinition的结合 。它表示这是一个仓库类,用于封装数据访问逻辑。它可以用在任何类上,也可以作为其他注解的元注解,如@JpaRepository等。它有以下两个属性:

  • value:指定仓库的名称,默认为空。
  • transactionManagerRef:指定事务管理器的引用,默认为空。

2、@JpaRepository

这是一个组合注解,相当于@Repository和@QueryByExampleExecutor的结合 。它表示这是一个基于JPA的仓库接口,可以继承CrudRepository或PagingAndSortingRepository,并提供一些额外的方法,如saveAndFlush、deleteInBatch等。它可以用在任何接口上,也可以作为其他注解的元注解。它有以下两个属性:

  • value:指定仓库操作的实体类,默认为空。
  • transactionManagerRef:指定事务管理器的引用,默认为空。

3、@Query

这是一个方法级别的注解,表示使用自定义的查询语句来执行数据访问操作 。它可以用在任何方法上,也可以作为其他注解的元注解。它有以下几个属性:

  • value或nativeQuery:指定查询语句或原生查询语句,默认为空。
  • countQuery或countProjection:指定用于分页查询时计算总数的查询语句或投影字段,默认为空。
  • name:指定命名查询的名称,默认为空。
  • countName:指定用于分页查询时计算总数的命名查询的名称,默认为空。
  • clearAutomatically:指定是否在执行更新或删除操作后自动清除持久化上下文,默认为false。
  • flushAutomatically:指定是否在执行更新或删除操作前自动刷新持久化上下文,默认为false。

4、@Param

这是一个参数级别的注解,表示将方法参数绑定到查询语句中的占位符或命名参数 。它只能用在被@Query等注解标记的方法中。它有以下一个属性:

  • value:指定参数绑定到查询语句中的占位符或命名参数,默认为空。

5、@Modifying

这是一个方法级别的注解,表示该方法执行更新或删除操作 。它只能用在被@Query等注解标记的方法中。它有以下两个属性:

  • clearAutomatically:指定是否在执行更新或删除操作后自动清除持久化上下文,默认为false。
  • flushAutomatically:指定是否在执行更新或删除操作前自动刷新持久化上下文,默认为false。

6、@Transactional

这是一个类级别或方法级别的注解,表示该类或方法需要进行事务管理 。它可以用在任何类或方法上,也可以作为其他注解的元注解。它有以下几个属性:

  • value或transactionManager:指定事务管理器的名称或引用,默认为空。
  • propagation:指定事务传播行为,默认为Propagation.REQUIRED。
  • isolation:指定事务隔离级别,默认为Isolation.DEFAULT。
  • timeout:指定事务超时时间(秒),默认为-1(不超时)。
  • readOnly:指定事务是否只读,默认为false。
  • rollbackFor或rollbackForClassName:指定需要回滚事务的异常类或类名数组,默认为空(所有异常都回滚)。
  • noRollbackFor或noRollbackForClassName:指定不需要回滚事务的异常类或类名数组,默认为空(所有异常都回滚)。

7、@Cacheable

这是一个方法级别的注解,表示该方法的返回值需要缓存 。它可以用在任何方法上,也可以作为其他注解的元注解。它有以下几个属性:

  • value或cacheNames:指定缓存的名称或名称数组,默认为空。
  • key:指定缓存的键,默认为方法参数的哈希值。
  • keyGenerator:指定缓存的键生成器,默认为空。
  • cacheManager:指定缓存管理器的名称或引用,默认为空。
  • cacheResolver:指定缓存解析器的名称或引用,默认为空。
  • condition:指定缓存的条件,只有满足条件才进行缓存,默认为空。
  • unless:指定缓存的否定条件,只有不满足条件才进行缓存,默认为空。
  • sync:指定是否使用同步模式进行缓存,默认为false。

四、测试注解

1、@SpringBootTest

这是一个类级别的注解,表示该类是一个springboot测试类,可以加载完整的springboot应用上下文 。它可以用在任何类上,也可以作为其他注解的元注解。它有以下几个属性:

  • value或properties:指定要添加或覆盖的配置属性或属性数组,默认为空。
  • classes:指定要加载的配置类或类数组,默认为空。
  • webEnvironment:指定Web环境的类型,默认为WebEnvironment.MOCK。
  • args:指定要传递给springboot应用的命令行参数或参数数组,默认为空。

2、@RunWith

这是一个类级别的注解,表示使用指定的运行器来执行测试类 。它可以用在任何类上,也可以作为其他注解的元注解。它有以下一个属性:

  • value:指定要使用的运行器类,默认为空。

3、@Test

这是一个方法级别的注解,表示该方法是一个测试方法,需要被运行器执行 。它可以用在任何方法上,也可以作为其他注解的元注解。它有以下两个属性:

  • expected:指定期望抛出的异常类,默认为None.class(不期望抛出异常)。
  • timeout:指定测试方法的超时时间(毫秒),默认为0(不超时)。

4、@Before

这是一个方法级别的注解,表示该方法需要在每个测试方法之前执行 。它可以用在任何方法上,也可以作为其他注解的元注解。

5、@After

这是一个方法级别的注解,表示该方法需要在每个测试方法之后执行 。它可以用在任何方法上,也可以作为其他注解的元注解。

6、@BeforeClass

这是一个静态方法级别的注解,表示该方法需要在所有测试方法之前执行一次 。它只能用在静态方法上,也可以作为其他注解的元注解。

7、@AfterClass

这是一个静态方法级别的注解,表示该方法需要在所有测试方法之后执行一次 。它只能用在静态方法上,也可以作为其他注解的元注解。

8、@MockBean

这是一个字段级别或方法级别的注解,表示该字段或方法返回值需要被模拟成一个bean,并注册到spring容器中 。它可以用在任何字段或方法上,也可以作为其他注解的元注解。它有以下两个属性:

  • name:指定模拟bean的名称,默认为空。
  • reset:指定模拟bean是否需要在每个测试方法之后重置,默认为MockReset.AFTER。

9、@SpyBean

这是一个字段级别或方法级别的注解,表示该字段或方法返回值需要被包装成一个spy对象,并注册到spring容器中 。它可以用在任何字段或方法上,也可以作为其他注解的元注解。它有以下两个属性:

  • name:指定spy对象的名称,默认为空。
  • reset:指定spy对象是否需要在每个测试方法之后重置,默认为MockReset.AFTER。

总结

springboot提供了许多方便实用的注解,可以帮助开发者快速配置、启动、管理、访问和测试springboot应用。学习起来!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot注解详解:从核心到Web,从数据到测试,一网打尽 的相关文章

随机推荐

  • unity3D之动态的创建球体游戏对象js

    function OnGUI if GUILayout Button 创建立方体 GUILayout Height 50 var objCube GameObject CreatePrimitive PrimitiveType Sphere
  • JS 插入排序

    算法描述 插入排序的算法描述是一种简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中从后向前扫描 找到相应位置并插入 一般来说 插入排序都采用in place在数组上实现 具体算法描述如下 从第一个元素开始
  • 【OpenCV4】拉普拉斯算子提取边缘 cv::Laplacian() 用法详解和代码示例(c++)

    作用原理 拉普拉斯算子可以用于边缘检测 同时该算子不具有方向性 可以同时检测到 X 方向和 Y 方向的边缘 综合后检测出图像的边缘 即拉普拉斯算子是 各向同性 的 这在很多情况下是一个优点 因为我们一般来说会同时关注 X 方向和 Y 方向的
  • xcode4的环境变量,Build Settings参数,workspace及联编设置

    一 xcode4中的环境变量 BUILT PRODUCTS DIR build成功后的 最终产品路径 可以在Build Settings参数的Per configuration Build Products Path项里设置 TARGET
  • 英语台词--冰与火之歌

    Your roof your rules 你的地盘 你做主
  • C++基础——常引用与类型转换详解

    通过前两篇对引用的讲解 想必大家都对引用有了较为深刻的理解 没看过的小伙伴可以去看看 C 基础 引用讲解1 C 基础 引用讲解2 目录 一 常引用 1 权限的平移 2 权限的放大 3 权限的缩小 二 引用的类型转换 一 常引用 这次我来说一
  • 史上最全的Python兼职接单挣钱教程,十分详细(附基础教程)

    学python编程能挣钱吗 怎么挣钱 答案是可以的 有两点我都赚到钱的方法 接私活和自媒体 一 赚钱第一种方式 接私活 刚学会python那会 就有认识的朋友介绍做一个网站的私活 当时接单赚了4K 仅代表本人个人收益 后又自己接过开发网站后
  • A2W和W2A 很好的多字节和宽字节字符串的转换宏

    分享一下我老师大神的人工智能教程 零基础 通俗易懂 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 造福人民 实现我们中华民族伟大复兴 作者 朱金灿 来源 http blog csdn ne
  • github CPlusPlusThings 基础学习笔记

    来源 Light City CPlusPlusThings C 那些事 github com 目录 const static this inline sizeof 函数指针 纯虚函数和抽象类 vptr vtable virtual vola
  • Dell R410服务器查看系统raid级别

    注意 raid 如果有问题 会导致机器网络自动断开连接 连不上机器 1 查看inux 怎么查看raid做的 是几 软件raid 只能通过Linux系统本身来查看 cat proc mdstat 可以看到raid级别 状态等信息 硬件raid
  • 前端JSON数据传值到后端接收方式

    前端发送的数据 前端JS请求 1 demo为JSON格式数据 2 let para 3 dataJ JSON stringfiy demo 4 5 这一段是Vue封装的方法 本质就是一条url 6 this http post webRoo
  • js去除url中的localtion.search部分

    localtion search是url中拼接的参数部分 js去除url中的localtion search部分包括 部分 if location search var old url window location href var ne
  • Java算法结构---------线性表

    线性表相关介绍 线性表是一种最常用 最简单的线性结构 线性表的主要操作特定是 可以在任意位置上插入一个数据元素和删除一个数据元素 线性表可以用顺序存储结构和链式存储结构实现 用顺序存储结构实现的线性表称为顺序表 用链式存储结构实现的线性表称
  • node.js(第七章)登录鉴权的方式一Cookie&Session

    1 Cookie Session HTTP 无状态 我们知道 HTTP 是无状态的 也就是说 HTTP 请求方和响应方间无法维护状态 都是一次性的 它不知道前后的请求都发生了什么 但有的场景下 我们需要维护状态 最典型的 一 个用户登陆CS
  • Linux基础笔记15

    文本处理 wc 用于统计文件的字节数 单词数 行数等信息 并将统计结果标准输出到终端 w 统计单词数 c 统计字节数 l 统计行数 m 统计字符数 L 显示最长行的长度 help 显示帮助信息 version 显示版本信息 root iZr
  • PHP静态绑定知识点学习记录

    最近在学习JAVA基础中关于静态方法的知识 回想起PHP可以使用self 或者static 两种方式来进行静态方法的调用 有些忘记两者的差异 因此 做一下学习记录 后期绑定 的意思是说 static 不再被解析为定义当前方法所在的类 而是在
  • Linux 学习笔记1 安装linux详细教程

    系统 CentOS 8 1 1911 x86 64 dvd1 软件 VMware Workstation Pro 16 安装centos VM安装的步骤 1 去BIOS里修改设置开启以常交 f2 f10 2 安装虚拟机软件 vm15 5 演
  • QT(qCompress和qUncompress)与zlib(compress和uncompress)相互调用

    因为QT也是用zlib库的 所以理论上数据是可以直接互通的 但现实是残酷的 通过对qCompress和compress压缩的数据进行打印 可以知道qCompress比compress的数据长四个字节 而这四个字节的内容则未压缩前的数据长度
  • 解决图像目标检测两框重叠问题

    文章目录 1 问题现象 2 解决办法 3 Non Maximum Suppression 原理 3 1 什么是非极大值抑制 3 2 为什么要用非极大值抑制 3 3 如何使用非极大值抑制 3 4 效果 4 参考资料 1 问题现象 使用yolo
  • SpringBoot注解详解:从核心到Web,从数据到测试,一网打尽

    总结的了平时学习springboot常用的一些注解 方便以后开发时可以阅览回忆 springboot的常用注解可以分为以下几类 核心注解 这些注解是springboot的基础 用于启动 配置和管理springboot应用 Web MVC注解