超实用!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 接口类,以及两个实现类 CatDog

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博客

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

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

相关文章

可以在Playgrounds或Xcode Command Line Tool开始学习Swift

一、用Playgrounds 1. App Store搜索并安装Swift Playgrounds 2. 打开Playgrounds&#xff0c;点击 文件-新建图书。然后就可以编程了&#xff0c;如下&#xff1a; 二、用Xcode 1. 安装Xcode 2. 打开Xcode&#xff0c;选择Creat New Project 3. 选择macOS 4. 选择Comman…

3.前端--HTML标签-文本图像链接【2023.11.25】

1.HTML常用标签(文本图像链接&#xff09; 文本标签 标题 <h1> - <h6> 段落<p> 我是一个段落标签 </p> 换行 <br /> <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta ht…

VMWare虚拟机ubuntu克隆打不开

ubuntu克隆打不开 复制的存有ubuntu克隆的文件夹&#xff0c;导入vmware打不开 说找不到这个文件&#xff0c;那就到目录把它的删掉 的删掉 换000001.vmdk后缀的

电子学会C/C++编程等级考试2021年06月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数对 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。 比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。 时间限制:1000 内存限制…

使用Selenium、Python和图鉴打码平台实现B站登录

selenium实战之模拟登录b站 基础知识铺垫&#xff1a; 利用selenium进行截图&#xff1a; driver.save_screenshot() 注意图片文件名要用png结尾. 关于移动&#xff1a; ActionChains(bro).move_to_element_with_offset()# 对于某个图像ActionChains(bro).move_by_offset(…

一种LED驱动专用控制电路

一、基本概述 TM1620是一种LED&#xff08;发光二极管显示器&#xff09;驱动控制专用IC,内部集成有MCU数字接口、数据锁存 器、LED驱动等电路。本产品质量可靠、稳定性好、抗干扰能力强。主要适用于家电设备(智能热 水器、微波炉、洗衣机、空调、电磁炉)、机顶盒、电子称、…

033.Python面向对象_类补充_生命周期

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

[NOIP2006]明明的随机数

一、题目 登录—专业IT笔试面试备考平台_牛客网 二、代码 set去重&#xff0c;再利用vector进行排序 std::set是一个自带排序功能的容器&#xff0c;它已经按照一定的规则&#xff08;默认是元素的小于比较&#xff09;对元素进行了排序。因此&#xff0c;你不能直接对std::s…

【JAVA杂货铺】一文带你走进面向对象编程|继承|重载|重写|期末复习系列 | (中4)

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏:Java学习系列专栏&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 继承 私有成员变量在继承中的使用​编辑 当子类和父类变量不重名时: 当子类和父类重名时: &#x1f4dd;总结: 继承的含义: …

卷积神经网络经典backbone

特征提取是数据分析和机器学习中的基本概念&#xff0c;是将原始数据转换为更适合分析或建模的格式过程中的关键步骤。特征&#xff0c;也称为变量或属性&#xff0c;是我们用来进行预测、对对象进行分类或从数据中获取见解的数据点的特定特征或属性。 1.AlexNet paper&#…

jQuery_06 过滤器的使用

什么是过滤器&#xff1f; 过滤器就是用来筛选dom对象的&#xff0c;过滤器是和选择器一起使用的。在选择了dom对象后在进行过滤筛选。 jQuery对象中存储的dom对象顺序与页面标签声明有关系。 声明顺序就是dom中存放的顺序 1.基本过滤器 使用dom对象在数组中的位置来作为过滤条…

一网打尽异步神器CompletableFuture

Future接口以及它的局限性 我们都知道&#xff0c;Java中创建线程的方式主要有两种方式&#xff0c;继承Thread或者实现Runnable接口。但是这两种都是有一个共同的缺点&#xff0c;那就是都无法获取到线程执行的结果&#xff0c;也就是没有返回值。于是在JDK1.5 以后为了解决这…

FloodFill

"绝境之中才窥见&#xff0c;Winner&#xff0c;Winner" FloodFill算法简介: floodfill又翻译成漫水填充。我们可以将下面的矩阵理解为一片具有一定高度的坡地&#xff0c;此时突发洪水&#xff0c;洪水会将高度<0的地方填满。 话句话来说&#xff0c;Fl…

IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)

文章目录 前言分析解决方案一&#xff1a;替换创建项目的源方案二&#xff1a;升级JDK版本 参考文献 前言 起因 想创建一个springboot的项目&#xff0c;本地安装的是1.8&#xff0c;但是在使用Spring Initializr创建项目时&#xff0c;发现版本只有17和21。 在JDK为1.8的情况下…

代码随想录算法训练营第四十六天【动态规划part08】 | 139.单词拆分、背包总结

139.单词拆分 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 单词是物品&#xff0c;字符串s是背包&#xff0c;单词能否组成字符串s&#xff0c;就是问物品能不能把背包装满。 动规五部曲 确定dp数…

弹窗concrt140.dll丢失的解决方法,深度解析concrt140.dll丢失的原因

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示或者系统崩溃的情况。其中&#xff0c;concrt140.dll是一个常见的错误提示&#xff0c;这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;本文将介绍5种详细的解决方法&#xff0c;帮助您恢…

蓝桥杯官网算法赛(蓝桥小课堂)

问题描述 蓝桥小课堂开课啦&#xff01; 海伦公式&#xff08;Herons formula&#xff09;&#xff0c;也称为海伦-秦九韶公式&#xff0c;是用于计算三角形面积的一种公式&#xff0c;它可以通过三条边的长度来确定三角形的面积&#xff0c;而无需知道三角形的高度。 海伦公…

Python 进阶(十):数学计算(math 模块)

《Python入门核心技术》专栏总目录・点这里 文章目录 1. 导入math模块2. 常用数学函数3. 常量4. 其他函数和用法5. 总结 大家好&#xff0c;我是水滴~~ Python的math模块提供了许多数学运算函数&#xff0c;为开发者在数值计算和数据处理方面提供了强大的工具。本教程将详细介…

【100个Cocos实例】看完这个,我再也不要当赌狗了...

引言 探索游戏开发中抽奖转盘的奥秘。 抽奖转盘是一种常见的互动元素&#xff0c;通常用于游戏、营销活动等场景。 本文将介绍一下抽奖转盘的原理和实现。 本文源工程可在文末阅读原文获取&#xff0c;小伙伴们自行前往。 1.抽奖转盘的组成 抽奖转盘的实现涉及多个组成部分…

基于springboot校园车辆管理系统

背景 伴随着社会经济的快速发展&#xff0c;机动车保有量不断增加。不断提高的大众生活水平以及人们不断增长的自主出行需求&#xff0c;人们对汽车的 依赖性在不断增强。汽车已经发展成为公众日常出行的一种重要的交通工具。在如此形势下&#xff0c;高校校园内的机动车数量也…