超实用!Spring Boot 常用注解详解与应用场景
目录
一、Web MVC 开发时,对于三层的类注解
1.1 @Controller
1.2 @Service
1.3 @Repository
1.4 @Component
二、依赖注入的注解
2.1 @Autowired
2.2 @Resource
2.3 @Resource 与 @Autowired 的区别
2.3.1 实例讲解
2.4 @Value
2.5 @Data
三、Web 常用的注解
3.1 @RequestMapping
3.2 @RequestParam
3.2.1 语法
3.2.2 实例
3.3 @PathVariable
3.4 @RequestParam 和 @PathVariable 区别
3.5 @ResponseBody 和 @RequestBody
3.6 @RestController
3.7 @ControllerAdvice 和 @ExceptionHandler
四、Spring Boot 常用的注解
4.1 @SpringBootApplication
4.2 @EnableAutoConfiguration
4.3 @Configuration
4.4 @ComponentScan
五、AOP 常用的注解
5.1 @Aspect
5.2 @After
5.3 @Before
5.4 @Around
5.5 @Pointcut
六、测试常用的注解
6.1 @SpringBootTest
6.2 @Test
6.3 @RunWith
6.4 其他测试注解
七、其他常用注解
7.1 @Transactional
7.2 @Cacheable
7.3 @PropertySource
7.4 @Async
7.5 @EnableAsync
7.6 @EnableScheduling
7.7 @Scheduled
一、Web MVC 开发时,对于三层的类注解
1.1 @Controller
@Controller
注解用于标识一个类是 Spring MVC 控制器,处理用户请求并返回相应的视图。
@Controller
public class MyController {// Controller methods
}
1.2 @Service
@Service
注解用于标识一个类是业务层组件,通常包含了业务逻辑的实现。
@Service
public class MyService {// Service methods
}
1.3 @Repository
@Repository
注解用于标识一个类是数据访问层组件,通常用于对数据库进行操作
@Repository
public class MyRepository {// Data access methods
}
1.4 @Component
@Component
是一个通用的组件标识,可以用于标识任何层次的组件,但通常在没有更明确的角色时使用。
@Component
public class MyComponent {// Class implementation
}
二、依赖注入的注解
2.1 @Autowired
@Autowired
注解用于自动装配 Bean,可以用在字段、构造器、方法上
@Service
public class MyService {@Autowiredprivate MyRepository myRepository;
}
2.2 @Resource
@Resource
注解也用于依赖注入,通常用在字段上,可以指定要注入的 Bean 的名称
@Service
public class MyService {@Resource(name = "myRepository")private MyRepository myRepository;
}
2.3 @Resource
与 @Autowired
的区别
@Autowired
是 Spring 提供的注解,按照类型进行注入。@Resource
是 JavaEE 提供的注解,按照名称进行注入。在 Spring 中也可以使用,并且支持指定名称。
2.3.1 实例讲解
新建 Animal
接口类,以及两个实现类 Cat
和 Dog
。
public interface Animal {String makeSound();
}@Component
public class Cat implements Animal {@Overridepublic String makeSound() {return "Meow";}
}@Component
public class Dog implements Animal {@Overridepublic String makeSound() {return "Woof";}
}
编写测试用例:
@Service
public class AnimalService {@Autowiredprivate Animal cat;@Resource(name = "dog")private Animal dog;public String getCatSound() {return cat.makeSound();}public String getDogSound() {return dog.makeSound();}
}
2.4 @Value
@Value
注解用于从配置文件中读取值,并注入到属性中。
@Service
public class MyService {@Value("${app.message}")private String message;
}
2.5 @Data
@Data
是 Lombok 提供的注解,用于自动生成 Getter、Setter、toString 等方法。
@Data
public class MyData {private String name;private int age;
}
三、Web 常用的注解
3.1 @RequestMapping
@RequestMapping
注解用于映射请求路径,可以用在类和方法上。
@Controller
@RequestMapping("/api")
public class MyController {@GetMapping("/hello")public String hello() {return "Hello, Spring!";}
}
3.2 @RequestParam
@RequestParam
注解用于获取请求参数的值。
3.2.1 语法
@RequestParam(name = "paramName", required = true, defaultValue = "default")
3.2.2 实例
@GetMapping("/greet")
public String greet(@RequestParam(name = "name", required = false, defaultValue = "Guest") String name) {return "Hello, " + name + "!";
}
3.3 @PathVariable
@PathVariable
注解用于从 URI 中获取模板变量的值。
@GetMapping("/user/{id}")
public String getUserById(@PathVariable Long id) {// Retrieve user by ID
}
3.4 @RequestParam
和 @PathVariable
区别
@RequestParam
用于获取请求参数。@PathVariable
用于获取 URI 中的模板变量。
3.5 @ResponseBody
和 @RequestBody
@ResponseBody
注解用于将方法的返回值直接写入 HTTP 响应体中。@RequestBody
注解用于从 HTTP 请求体中读取数据。
3.6 @RestController
@RestController
注解相当于 @Controller
和 @ResponseBody
的组合,用于标识 RESTful 风格的控制器。
@RestController
@RequestMapping("/api")
public class MyRestController {@GetMapping("/hello")public String hello() {return "Hello, Spring!";}
}
3.7 @ControllerAdvice
和 @ExceptionHandler
@ControllerAdvice
注解用于全局处理异常,@ExceptionHandler
用于定义处理特定异常的方法。
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ResponseEntity<String> handleException(Exception e) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error");}
}
四、Spring Boot 常用的注解
4.1 @SpringBootApplication
@SpringBootApplication
是一个复合注解,包含了 @SpringBootConfiguration
、@EnableAutoConfiguration
和 @ComponentScan
@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
4.2 @EnableAutoConfiguration
@EnableAutoConfiguration
注解用于开启 Spring Boot 的自动配置机制。
4.3 @Configuration
@Configuration
注解用于定义配置类,替代传统的 XML 配置文件。
@Configuration
public class MyConfig {@Beanpublic MyBean myBean() {return new MyBean();}
}
4.4 @ComponentScan
@ComponentScan
注解用于配置组件扫描的基础包。
@SpringBootApplication
@ComponentScan(basePackages = "com.example")
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
五、AOP 常用的注解
5.1 @Aspect
@Aspect
注解用于定义切面类,通常与其他注解一起使用。
@Aspect
@Component
public class MyAspect {// Aspect methods
}
5.2 @After
@After
注解用于定义后置通知,方法在目标方法执行后执行。
@After("execution(* com.example.service.*.*(..))")
public void afterMethod() {// After advice
}
5.3 @Before
@Before
注解用于定义前置通知,方法在目标方法执行前执行
@Before("execution(* com.example.service.*.*(..))")
public void beforeMethod() {// Before advice
}
5.4 @Around
@Around
注解用于定义环绕通知,方法可以控制目标方法的执行。
@Around("execution(* com.example.service.*.*(..))")
public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable {// Before adviceObject result = joinPoint.proceed(); // Proceed to the target method// After advicereturn result;
}
5.5 @Pointcut
@Pointcut
注解用于定义切点,将切点表达式提取出来,供多个通知共享。
@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceMethods() {// Pointcut expression
}
六、测试常用的注解
6.1 @SpringBootTest
@SpringBootTest
注解用于启动 Spring Boot 应用程序的测试。
@SpringBootTest
public class MyApplicationTests {// Test methods
}
6.2 @Test
@Test
注解用于标识测试方法。
@Test
public void myTestMethod() {// Test method
}
6.3 @RunWith
@RunWith
注解用于指定运行测试的类。
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyApplicationTests {// Test methods
}
6.4 其他测试注解
@Before
: 在测试方法之前执行。@After
: 在测试方法之后执行。@BeforeClass
: 在类加载时执行一次。@AfterClass
: 在类卸载时执行一次。
七、其他常用注解
7.1 @Transactional
@Transactional
注解用于声明事务,通常用在方法或类上。
@Service
@Transactional
public class MyTransactionalService {// Transactional methods
}
7.2 @Cacheable
@Cacheable
注解用于声明方法的结果可以被缓存。
@Service
public class MyCachingService {@Cacheable("myCache")public String getCachedData(String key) {// Method implementation}
}
7.3 @PropertySource
@PropertySource
注解用于引入外部的属性文件。
@Configuration
@PropertySource("classpath:my.properties")
public class MyConfig {// Configuration methods
}
7.4 @Async
@Async
注解用于声明异步方法,通常用在方法上。
@Service
public class MyAsyncService {@Asyncpublic void asyncMethod() {// Asynchronous method implementation}
}
7.5 @EnableAsync
@EnableAsync
注解用于开启异步方法的支持。
@Configuration
@EnableAsync
public class MyConfig {// Configuration methods
}
7.6 @EnableScheduling
@EnableScheduling
注解用于开启计划任务的支持。
@Configuration
@EnableScheduling
public class MyConfig {// Configuration methods
}
7.7 @Scheduled
@Scheduled
注解用于定义计划任务的执行时间。
@Service
public class MyScheduledService {@Scheduled(cron = "0 0 12 * * ?") // Run every day at 12 PMpublic void scheduledMethod() {// Scheduled method implementation}
}
以上几乎涵盖了所有springBoot和springFramework的常见注解,博客整体框架参考学习Spring Boot 注解,这一篇就够了(附带部分注解实例讲解)_springboot注解 举例-CSDN博客
相关文章:

超实用!Spring Boot 常用注解详解与应用场景
目录 一、Web MVC 开发时,对于三层的类注解 1.1 Controller 1.2 Service 1.3 Repository 1.4 Component 二、依赖注入的注解 2.1 Autowired 2.2 Resource 2.3 Resource 与 Autowired 的区别 2.3.1 实例讲解 2.4 Value 2.5 Data 三、Web 常用的注解 3.1…...

【古月居《ros入门21讲》学习笔记】11_客户端Client的编程实现
目录 说明: 1. 服务模型 2. 实现过程(C) 创建功能包 创建客户端代码(C) 配置客户端代码编译规则 编译 运行 3. 实现过程(Python) 创建客户端代码(Python) 运行…...
小程序和Vue写法的区别主要有什么不同
1.语法不同:小程序使用的是WXML、WXSS和JS,而Vue使用的是HTML、CSS和JSX。 2.数据绑定方式不同:小程序使用的是双向数据绑定,而Vue使用的是单向数据流。 1)在小程序中需要使用e.currentTarget.dataset.*的方式获取&…...
Flutter之MQTT使用
1.添加依赖: 首先,需要在Flutter项目的pubspec.yaml文件中添加mqtt_client依赖。 dependencies:#https://pub.dev/packages/mqtt_clientmqtt_client: ^10.0.02.创建MQTT客户端并连接到MQTT服务器:2.创建一个MQTT客户端实例来进行连接和通信 Fu…...

vr红色教育虚拟展馆全景制作提升单位品牌形象
720全景展馆编辑平台以其独特的优势,为展览行业带来了革命性的变革。这种创新的技术应用为参展商提供了更高效、更便捷、更全面的展示解决方案,进一步提升了展览行业的水平和影响力。 一、提升展示效果,增强品牌形象 720全景展馆编辑平台通过…...

【Spring】Spring是什么?
文章目录 前言什么是Spring什么是容器什么是 IoC传统程序开发控制反转式程序开发理解Spring IoCDI Spring帮助网站 前言 前面我们学习了 servlet 的相关知识,但是呢?使用 servlet 进行网站的开发步骤还是比较麻烦的,而我们本身程序员就属于是…...
事件循环机制及常见面试题
借鉴: 《Javascript 忍者秘籍》第二版,事件循环篇 面试 | JS 事件循环 event loop 经典面试题含答案 - 知乎 (zhihu.com) 概念 主栈队列就是一个宏任务,每一个宏任务执行完就会执行宏任务中的微任务,直到微任务全部都执行完&a…...

智能监控平台/视频共享融合系统EasyCVR接入RTSP协议视频流无法播放原因是什么?
视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能/大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园区、楼…...
c# statusStrip 显示电脑主机名、IP地址、MAC地址
控件: ToolStripStatusLabel 主机名: Dns.GetHostName() IP地址: Dns.GetHostAddresses(Dns.GetHostName())[0].ToString() 当前程序的版本: Assembly.GetExecutingAssembly().GetName().Version.ToString() 获取系统版本 …...

Cesium.CustomShader颜色值显示错误
官方示例: Cesium Sandcastle 测试过程: 1、修改示例,把customshader中的fragmentShaderText替换为如下代码 void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {//注意:下述颜色的b值是0.1&#x…...
XSLVGL2.0 User Manual 页面管理器(v2.0)
XSLVGL2.0 开发手册 XSLVGL2.0 User Manual 页面管理器 1、概述2、特性3、APIs3.1、xs_page_init3.2、xs_page_wait_inited3.3、xs_page_exit3.4、xs_page_acquire3.5、xs_page_release3.6、xs_page_set_bootlogo3.7、xs_page_setup_clear_finish3.8、xs_page_setup_is_finish…...

论文学习-Attention Is All You Need
Attention Is All You Need 目前暂时不会用到,大概了解一下即可。 Recurrent model 序列化的计算方式,难以并行,随着序列的增长,以前的记忆会逐渐丢失。而Attention机制可以观察到句子中所有的信息,不受距离影响&…...
Springboot 使用 RabbitMq 延迟插件 实现订单到期未支付取消订单、设置提醒消息
示例业务场景: 场景1:客户下单后,15分钟内未支付取消订单! 场景2:客户下单支付成功后,5分钟内商家未处理订单,需要推送一条消息提醒商家。如依旧未处理,则需要每隔2分钟消息提醒一下…...
Linux安装Tesseract-OCR(操作系统CentOS)
Linux安装Tesseract-OCR 第一步,安装依赖第二步,下载安装包第三步,安装leptonica库第四步,安装tesseract第五步,添加语言包第六步,测试 第一步,安装依赖 sudo yum install libpng-devel rpm -q…...

pair和typedef
文章目录 一、pair用法1.2、pair的创建和初始化1.3、pair对象的操作1.4、(make_pair)生成新的pair对象1.5、通过tie获取pair元素值 2、typedef2.1、什么是typedef2.2、typedef用法2.2.1、对于数据类型使用例如:2.2.2、对于指针的使用例如2.2.3、对于结构体的使用 2.…...

rdf-file:分布式环境下的文件处理
一:简介 数据量大了以后,单机解析或者生成文件的效率就很低,需要通过集群处理: 机构过来的文件:我们先对文件进行分片,在利用集群集群处理分片文件。给机构文件:分库分表数据,每个…...

Maven下载与安装教程
一、下载 Maven 进入 Maven 官网:maven.apache.org/download.cgi 选择 .zip 文件下载,最新版本是 3.9.5 二、安装 Maven 将 .zip 文件解压到没有中文没有空格的路径下。例如下图,在创建一个repository的空文件夹在他的下面,用于…...
C++(20):通过starts_with/ends_with检查字符串
C20提供了starts_with用于检查字符串是否以某个字符串开始,ends_with用于检查是否以某个字符串结束: #include <iostream> #include <string> using namespace std;int main() {string str "hello and 88";cout<<str.star…...
YOLOv8+Nanodet强强联合改进标签分配:使用NanoDet动态标签分配策略,同时集成VFL全新损失,来打造新颖YOLOv8检测器
💡本篇内容:YOLOv8+Nanodet强强联合改进标签分配:使用NanoDet动态标签分配策略,同时集成VFL全新损失,来打造新颖YOLOv8检测器 💡🚀🚀🚀本博客 YOLO系列 + 改进NanoDet模型的动态标签分配策略源代码改进 💡一篇博客集成多种创新点改进:VFL损失函数 + Nanodet…...
base64字符串转成file
分割base64字符串,获取base64的格式和ASCII字符串;使用atob()方法将base64中的ASCII字符串解码成二进制数据"字符串";将二进制数据按位放入8 位无符号整型数组中适用new File()方法将ArrayBuffer转换成file对象 const base64 &qu…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...
大模型真的像人一样“思考”和“理解”吗?
Yann LeCun 新研究的核心探讨:大语言模型(LLM)的“理解”和“思考”方式与人类认知的根本差异。 核心问题:大模型真的像人一样“思考”和“理解”吗? 人类的思考方式: 你的大脑是个超级整理师。面对海量信…...

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项
一、条形码识别改名使用教程 打开软件并选择处理模式:打开软件后,根据要处理的文件类型,选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件,就选择 “PDF 识别模式”;若是处理图片文件&…...