认识 spring AOP (面向切面编程) - springboot
前言
本篇介绍什么是spring AOP, AOP的优点,使用场景,spring AOP的组成,简单实现AOP 并 了解它的通知;如有错误,请在评论区指正,让我们一起交流,共同进步!
文章目录
- 前言
- 1. 什么是spring AOP?
- AOP优点:
- spring AOP 使用场景
- 认识AOP的组成
- 2. 实现spring AOP - 认识各种通知
- 总结
本文开始
1. 什么是spring AOP?
AOP: 面向切面编程,也就是面向某一类编程,对某一类事情进行统一处理;
spring AOP: 是实现了AOP这种思想的一个框架;
AOP优点:
- 减少重复代码:对一类同样的工作统一处理;
- 提高开发效率:同上;
spring AOP 使用场景
使用:统一用户登录判断; 统一异常处理; 统一日志等等;
认识AOP的组成
- 切面- Aspect:AOP定义的是一个事件;例如:登录操作的整个过程;- 某个具体功能实现的过程 - 一共类;
- 切点 - Pointcut:AOP定义的具体规则;例如:验证登录的 方法;- 实现功能的方法 - 类中的方法定义;
- 连接点 - Join Point:可能触发切点的所有点;- 可能调用功能的某个方法的点;
- 通知 - Advice:AOP具体执行的方法;例如:方法的具体实现;- 代码具体实现 - 类中方法的具体实现;
① 前置通知 @Before
② 后置通知 @After
③ 环绕通知 @Around
④ 异常通知 @AfterThrowing
⑤ 返回通知 @AfterReturning
通知执行的顺序:环绕通知之前 > 前置通知 > 方法 > 方法返回后通知 > 后置通知 > 环绕通知之后
2. 实现spring AOP - 认识各种通知
2.1 在springboot项目中,原有依赖 + 添加spring AOP 依赖
2.2 实现过程 定义切面 + 定义切点 + 定义通知
- 定义切面 -> 定义类
@Aspect // 定义切面
@Component //随框架启动,注入到容器中
public class UserAspect {//定义切点 + 通知...
}
- 定义切点 -> 定义方法
//定义切点, 对UserController进行拦截@Pointcut("execution(* com.example.demo.controller.UserController.*(..))")public void pointcut() {}//空方法:方法名用于标识
切点表达式:识别该包下类下的任意方法,参数不限;
- 定义通知:切点的方法名,写在通知参数中,用于识别是哪个切点的通知;(想了解具体的 百度 - AspectJ 语法)
//前置通知@Before("pointcut()")public void doBefore() {System.out.println("执行前置通知!");}
//后置通知@After("pointcut()")public void doAfter() {System.out.println("执行后置通知!");}
//后置返回后的通知@AfterReturning("pointcut()")public void doAfterReturn() {System.out.println("执行返回后通知!");}//抛出异常后通知@AfterThrowing("pointcut()")public void doAfterThrow() {System.out.println("执行抛异常后的通知!");}
//环绕通知//使用环绕通知:例如:统计时间,就可以使用环绕通知,将通知前 与 通知后 放在一起@Around("pointcut()") //ProceedingJoinPoint:获取连接点;执行 =》返回框架,执行public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("执行环绕通知之前!");Object result = joinPoint.proceed();System.out.println("执行环绕通知之后");return result;}
总结
✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!
相关文章:
认识 spring AOP (面向切面编程) - springboot
前言 本篇介绍什么是spring AOP, AOP的优点,使用场景,spring AOP的组成,简单实现AOP 并 了解它的通知;如有错误,请在评论区指正,让我们一起交流,共同进步! 文章目录 前言1. 什么是s…...
将css文件中的px转化为rem
pxToRem.js /*** 使用方式:* 与引入的文件放在同一目录下进行引用配置,执行:node (定义的文件)*/ const fs require(fs) const path require(path) /*** entry:入口文件路径 type:Strng* pxtopx:以倍数转…...
JNI之Java实现远程打印
打印机是最常见的办公设备了。一般情况下如果需要实现打印,可通过前端print.js包来完成。但是,如果要实现智能办公打印,就可以使用JNI技术、封装接口、远程调用实现完成。 导包 jacob:Java COM Bridge <dependency><g…...
YOLOv5基础知识入门(2)— YOLOv5核心基础知识讲解
前言:Hello大家好,我是小哥谈。YOLOV4出现之后不久,YOLOv5横空出世。YOLOv5在YOLOv4算法的基础上做了进一步的改进,使检测性能得到更进一步的提升。YOLOv5算法作为目前工业界使用的最普遍的检测算法,存在着很多可以学习…...
免费的scrum敏捷开发管理工具
Scrum中非常强调公开、透明、直接有效的沟通,这也是“可视化的管理工具”在敏捷开发中如此重要的原因之一。通过“可视化的管理工具”让所有人直观的看到需求,故事,任务之间的流转状态,可以使团队成员更加快速适应敏捷开发流程。 …...
Hive创建外部表详细步骤
① 在hive中执行HDFS命令:创建/data目录 hive命令终端输入: hive> dfs -mkdir -p /data; 或者在linux命令终端输入: hdfs dfs -mkdir -p /data; ② 在hive中执行HDFS命令:上传/emp.txt至HDFS的data目录下,并命名为…...
leetcode 452. 用最少数量的箭引爆气球
2023.8.2 本题思路先将二维数组points按照第一个维度排序, 然后初始化射箭数为1,因为题中提示说了最少有一个气球。 在遍历这些气球,看是否有重叠,如果没有重叠区域,射箭数;如果有重叠区域,更新…...
Pytorch Tutorial【Chapter 3. Simple Neural Network】
Pytorch Tutorial【Chapter 3. Simple Neural Network】 文章目录 Pytorch Tutorial【Chapter 3. Simple Neural Network】Chapter 3. Simple Neural Network3.1 Train Neural Network Procedure训练神经网络流程3.2 Build Neural Network Procedure 搭建神经网络3.3 Use Loss …...
2.虚拟机开启kali_linux
首先你应该搞一个虚拟机,搞虚拟机可以看一下这个 附录三 虚拟机的使用_Suyuoa的博客-CSDN博客 然后你需要搞一个 kali linux的镜像 Get Kali | Kali Linux 镜像下载好之后解压,你会得到一个文件夹包含下面这些文件 之后打开VMware,点击打开虚…...
【StyleGAN2论文精读CVPR_2020】Analyzing and Improving the Image Quality of StyleGAN
【StyleGAN2论文精读CVPR_2020】Analyzing and Improving the Image Quality of StyleGAN 一、前言Abstract1. Introduction2. Removing normalization artifacts2.1. Generator architecture revisited2.2. Instance normalization revisited 3. Image quality and generator …...
医学图像处理
医学图像处理 opencv批量分片高像素图像病理图像色彩特征提取病理图像细微特征提取自动数据标注分类场景下的医学图像分析分割场景下的医学图像分析检测场景下的医学图像分析 , i ] k 8 < * I opencv批量分片高像素图像 医学图像通常是大像素(1920x1080&…...
PyCharm安装使用2023年教程,PyCharm与现流行所有编辑器对比。
与PyCharm类似的功能和特性的集成开发环境(IDE)和代码编辑器有以下几种: Visual Studio Code(VS Code):由Microsoft开发,VS Code是一个高度可定制和可扩展的代码编辑器。它支持多种编程语言&am…...
vue3中CompositionApi理解与使用
CompositionApi,组合式API,相当于react中hooks,函数式。 优势:1,增加了代码的复用性(类似mixin,slot,高阶组件功能) 2,代码可读性更好。可以将处理逻辑和视图…...
【前瞻】视频技术的发展趋势讨论以及应用场景
视频技术的发展可以追溯到19世纪初期的早期实验。到20世纪初期,电视技术的发明和普及促进了视频技术的进一步发展。 1)数字化:数字化技术的发明和发展使得视频技术更加先进。数字电视信号具有更高的清晰度和更大的带宽,可以更快地…...
Visual Studio在Debug模式下,MFC工程中包含Eigen库时的定义冲突的问题
Visual Studio在Debug模式下,MFC工程中包含Eigen库时的定义冲突的问题 报错信息 Eigen\src\Core\PlainObjectBase.h(143,5): error C2061: 语法错误: 标识符“THIS_FILE” Eigen\src\Core\PlainObjectBase.h(143,1): error C2333: “Eigen::PlainObjectBase::opera…...
Java实现购买机票案例
Java实现购买机票案例 需求分析代码实现小结Time 需求分析 1.首先,考虑方法是否需要接收数据处理? 阅读需求我们会发现,不同月份、不同原价、不同舱位类型优惠方案都不一样; 所以,可以将原价、月份、舱位类型写成参数 …...
通用FIR滤波器的verilog实现(内有Lowpass、Hilbert参数生成示例)
众所周知,Matlab 中的 Filter Designer 可以直接生成 FIR 滤波器的 verilog 代码,可以方便地生成指定阶数、指定滤波器参数的高通、低通、带通滤波器,生成的 verilog 代码也可以指定输入输出信号的类型和位宽。然而其生成的代码实在算不上美观…...
有利于提高xenomai /PREEMPT-RT 实时性的一些配置建议
版权声明:转自: https://www.cnblogs.com/wsg1100 一、前言 1. 什么是实时 “实时”一词在许多应用领域中使用,人们它有不同的解释,并不总是正确的。人们常说,如果控制系统能够对外部事件做出快速反应,那么它就是实时运行的。根据这种解释,如果系统速度快,则系统被认…...
【LeetCode】24.两两交换链表中的节点
题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出:…...
融合大数据、物联网和人工智能的智慧校园云平台源码 智慧学校源码
电子班牌系统用以展示各个班级的考勤信息、授课信息、精品课程、德育宣传、班级荣誉、校园电视台、考场信息、校园通知、班级风采,是智慧校园和智慧教室的对外呈现窗口,也是学校校园文化宣传和各种信息展示的重要载体。将大数据、物联网和人工智能等新兴…...
避坑指南:PICO空间网格开发常见问题排查(视频透视/组件配置/真机调试)
PICO空间网格开发实战:视频透视配置与真机调试全解析 在混合现实(MR)开发领域,PICO设备凭借其出色的空间感知能力为开发者提供了广阔的创新空间。然而,当我们将Unity引擎与PICO硬件结合进行空间网格开发时,…...
Shadow Sound Hunter模型部署:Windows 11环境配置指南
Shadow & Sound Hunter模型部署:Windows 11环境配置指南 本文详细介绍了在Windows 11系统上部署Shadow & Sound Hunter模型的完整流程,包括系统要求、依赖安装、环境配置等关键步骤,帮助Windows用户快速上手。 1. 环境准备与系统要求…...
ClickHouse数据报表实战:如何把分组后的明细‘压缩’成一行摘要(附完整SQL)
ClickHouse数据报表实战:高效聚合多行文本的工程化解决方案 在数据分析与报表生成的实际业务场景中,我们经常遇到这样的需求:需要将同一维度下的多条文本明细(如用户行为日志、错误信息、月份列表等)合并成一条简洁的摘…...
从MAX30102项目实战出发:解决Keil5编译STM32时ARMCLANG和头文件缺失的连环坑
从MAX30102项目实战解析Keil5编译STM32的深度排坑指南 当你在深夜调试MAX30102血氧传感器时,Keil5突然弹出一连串编译器报错——这种经历对STM32开发者来说绝不陌生。本文将以真实项目为背景,拆解那些官方文档从未提及的编译陷阱。不同于常规操作手册&a…...
基于FPGA的伺服驱动系统:电流环控制与多环路反馈、SVPWM及编码器协议实现的研究
伺服驱动FPGA电流环,包含坐标变换,电流环,速度环,位置环,电机反馈接口,SVPWM,编码器协议,电流环和编码器协议都是FPGA里实现的伺服驱动系统里玩FPGA可不是闹着玩的,尤其是…...
激光+视觉+IMU+RTK融合实战:如何用多传感器打造厘米级三维重建系统?
激光视觉IMURTK融合实战:如何用多传感器打造厘米级三维重建系统? 在自动驾驶和机器人领域,三维重建技术正经历着从实验室走向工业落地的关键转折。传统单一传感器方案已无法满足复杂场景下的精度需求,而多传感器融合正成为突破性能…...
全民养虾潮背后:智能体产业的产业化困局
2026年3月,如果你在科技园区看到有人抱着电脑排长队,或者听到“养虾了吗”的问候,不必感到奇怪。这只“虾”正是开源AI智能体——OpenClaw。从社交平台刷屏的“养龙虾”攻略到GitHub星标数突破27万,超越Linux登顶全球开源项目榜首…...
等保三级Java安全改造全周期实录,从代码审计到渗透验证的12个生死关卡
第一章:等保三级Java安全改造的合规基线与生命周期全景图等保三级对Java应用提出了覆盖身份鉴别、访问控制、安全审计、通信保密性、代码安全及可信执行环境的全维度要求。其合规基线并非静态清单,而是贯穿需求分析、设计开发、测试验证、上线部署与持续…...
从零开始:用CosyVoice2-0.5B快速搭建AI语音生成平台
从零开始:用CosyVoice2-0.5B快速搭建AI语音生成平台 1. 为什么选择CosyVoice2-0.5B? 语音合成技术已经发展多年,但大多数解决方案要么需要复杂的配置过程,要么需要大量训练数据。阿里开源的CosyVoice2-0.5B打破了这一局面&#…...
MIKE URBAN中污水处理厂如何进行概化
01 前言应用厂网一体化耦合模型研究水厂间调度和厂前溢流入河污染量等内容时,由于不需要关注污水处理厂内部的具体处理工艺,需要对污水处理厂的关键设施进行概化处理。02 水厂资料收集收集污水处理的工艺流程图和设施设计参数。依据厂网一体化模型的研究…...

