一文了解SpringBoot中的Aop

目录

1.什么是Aop

2.相关概念

3.相关注解

4.为什么要用Aop

5.Aop使用案例


1.什么是Aop

AOP:Aspect Oriented Programming,面向切面,是Spring三大思想之一,另外两个是

IOC-控制反转

DI-依赖注入 (@Autowired、@Qualifier、@Resource)

2.相关概念

  • 切面(aspect):横切面对象,一般为一个具体类对象(可以借助@Aspect声明),可以理解为要植入的新的业务功能,这个功能交给某个类负责,这个类就是切面。
  • 切入点(pointcut):对连接点拦截内容的一种定义,在原有的哪些业务方法上扩展新的业务,可以将切入点理解为方法的集合,可以是1个类或某些类。
  • 连接点(joinpoint):程序执行过程中某个特定的点,一般指被拦截到的的方法,可以简单理解为切入点中的一个具体方法。
  • 通知(advice):拦截到连接点之后只要执行的方法,可以理解为一个业务中的扩展逻辑的若干步骤,先做什么(before),再做什么(afterReturn),最后做什么。
  • 目标对象(target):封装原业务逻辑的对象。
  • 代理对象(proxy):负责调用切面中的方法为目标对象植入新的功能。

3.相关注解

@Pointcut定义切入点
@Before目标方法执行之前执行
@After目标方法执行之后必定执行,无论是否报错
@AfterReturning目标方法有返回值且正常返回后执行
@AfterThrowing目标方法抛出异常后执行
@Around可以获取到目标方法的入参和返回值

4.为什么要用Aop

举个例子,假设我们有一个新增数据,和一个删除数据的功能。

可能之前的逻辑是

开始->鉴权->新增数据->记录操作日志->结束

开始->鉴权->删除数据->记录操作日志->结束

借助Aop,我们就可以实现

另外,在以下场景也可以借助Aop

系统日志处理、系统事务处理、系统安全验证、系统数据缓存等

5.Aop使用案例

先看一个简单的例子,就是通过execution表达式来定义某个包小的所有方法为切入点

第一个 * 符号表示返回值的类型任意
com.aop.service即需要进行横切的业务包
包名后面的 .*表示当前包下面的类
.*(..)表示任何方法名,括号表示参数,两个点表示任何参数类型
@Aspect
@Component
@Slf4j
@Order(10)
public class AopAdvice {@Before("execution (* com.erich.yand.service.console.day.end.*.*(..))")public void beforeAdvice() {log.info("beforeAdvice...");}@After("execution (* com.erich.yand.service.console.day.end.*.*(..))")public void afterAdvice() {log.info("afterAdvice...");}@Around("execution (* com.erich.yand.service.console.day.end.*.*(..))")public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) {log.info("before");try {proceedingJoinPoint.proceed();} catch (Throwable t) {t.printStackTrace();}log.info("after");}
}

当有多个切面时,Order越小越先执行。

执行后,可以看到结果

 说明执行到我们定义的包下的方法时,确实切进来了~~

以上就是Aop的一个简单案例了,具体如何使用他,还需要根据实际的业务场景来拓展~~

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

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

相关文章

【Linux操作系统】Linux系统编程中的互斥锁

文章目录 1. 互斥锁的原理2. 互斥锁的相关函数3. 互斥锁的例子总结 1. 互斥锁的原理 在Linux系统编程中,互斥锁(Mutex)是一种用于保护共享资源的同步机制。它可以确保在任意时刻只有一个线程可以访问被保护的资源,从而避免了多个…

极狐GitLab 价值流管理之「总时间图」使用指南

本文来源:about.gitlab.com 作者:Haim Snir 译者:极狐(GitLab) 市场部内容团队 对于软件研发管理者来说,了解在整个研发过程中时间都耗费在了哪些地方,是进行交付价值优化的关键洞察。GitLab / 极狐GitLab 新的价值流分…

【Flink】Flink架构及组件

我们学习大数据知识的时候,需要知道大数据组件如何安装以及架构组件,这将帮助我们更好的了解大数据组件 对于大数据Flink,架构图图下: 整个架构图有三种关键组件 1、Client:负责作业的提交。调用程序的 main 方法&am…

StreamPark

1、StreamPark的标语 一个神奇的框架,让流处理更简单 2、StreamPark的前世今生 早期用名streamx,加入apache孵化器之后更名为StreamPark 3、StreamPark可以为你提供什么 降低学习成本、开发门槛,让开发者只用关心核心的业务 简单来说&#xf…

人工智能浅浅的入门

目录 人工智能——让机器具备人的思维 一、人工智能三学派(主流方向——连接主义) 1.行为主义 2.符号主义 3.连接主义 二、连接主义的神经网络设计过程 1.举例:神经元 2.大致过程 三、人工智能的理解与涉及的重要点 1.个人观点 2.M…

KUKA机器人零点标定的具体方法

KUKA机器人零点标定的具体方法 在进行机器人校正时,先将各轴置于一个定义好的机械位置,即所谓的机械零点。这个机械零点位置表明了同轴的驱动角度之间的对应关系,它用一个测量刻槽表示。 为了精确地确定机器人某根轴的机械零点位置,一般应先找到其预校正位置,然后去掉测量…

Android开发之性能测试工具Profiler

前言 性能优化问题,在我们开发时都会遇到,但是在小厂和对自己要求不严格的情况下,我都很少去做性能优化; 在性能优化上,基本大家都是通过自己的开发经验和性能分析工具来发现问题,今天给大家分享一下小编最…

安装启动yolo5教程

目录 一、下载yolo5项目 二、安装miniconda(建议不要安装在C盘) 三、安装CUDA 四、安装pytorch 五、修改配置参数 六、修改电脑参数 七、启动项目 博主硬件: Windows 10 家庭中文版 一、下载yolo5项目 GitHub - ultralytics/yolov5:…

博客系统——前端部分

目录 一、博客页面介绍 二、实现博客列表页 1、先实现导航栏 2、页面主体 左侧区域的实现:​编辑 右侧页面的实现:​编辑 博客列表页代码汇总: 三、实现博客详情页 代码实现: 四、实现博客登录页​编辑 五、博客编辑页 …

测试框架pytest教程(6)钩子函数hook开发pytest插件

pytest hook 函数也叫钩子函数,pytest 提供了大量的钩子函数,可以在用例的不同生命周期自动调用。 比如,在测试用例收集阶段,可利用 hook 函数修改测试用例名称的编码。 pytest的hook是基于Python的插件系统实现的,使…

2023-08-25 LeetCode每日一题(统计二叉树中好节点的数目)

2023-08-25每日一题 一、题目编号 1448. 统计二叉树中好节点的数目二、题目链接 点击跳转到题目位置 三、题目描述 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有…

02.sqlite3学习——嵌入式数据库的基本要求和SQLite3的安装

目录 嵌入式数据库的基本要求和SQLite3的安装 嵌入式数据库的基本要求 常见嵌入式数据库 sqlite3简介 SQLite3编程接口模型 ubuntu 22.04下的SQLite安装 嵌入式数据库的基本要求和SQLite3的安装 嵌入式数据库的基本要求 常见嵌入式数据库 sqlite3简介 SQLite3编程接口模…

DataWhale 机器学习夏令营第三期——任务二:可视化分析

DataWhale 机器学习夏令营第三期 学习记录二 (2023.08.23)——可视化分析1.赛题理解2. 数据可视化分析2.1 用户维度特征分布分析2.2 时间特征分布分析 DataWhale 机器学习夏令营第三期 ——用户新增预测挑战赛 学习记录二 (2023.08.23)——可视化分析 2023.08.17 已跑通baseli…

最新PHP短网址生成系统/短链接生成系统/URL缩短器系统源码

全新PHP短网址系统URL缩短器平台,它使您可以轻松地缩短链接,根据受众群体的位置或平台来定位受众,并为缩短的链接提供分析见解。 系统使用了Laravel框架编写,前后台双语言使用,可以设置多域名,还可以开设套…

2023国赛数学建模思路 - 案例:退火算法

文章目录 1 退火算法原理1.1 物理背景1.2 背后的数学模型 2 退火算法实现2.1 算法流程2.2算法实现 建模资料 ## 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 退火算法原理 1.1 物理背景 在热力学上&a…

力与美的交响丨远航Y6全国媒体试驾会成都举办,实力演绎中式豪华+极致性能

8月24日,四川成都,远航Y6全国媒体试驾会圆满举办。来自全国的近百家媒体亲身试乘试驾,深度感受远航Y6诠释的高端豪华新体验。 绵绵细雨难掩相聚的热情。远航汽车自去年成都车展正式发布亮相,就与成都结下了不解之缘。历经一年的持…

关于chromedriver.exe一系列问题的解决办法

最新 chromedriver.exe下载地址:https://googlechromelabs.github.io/chrome-for-testing/#stable 下载最新版本的 chromedriver.exe 将其解压在 python.exe 同目录下,以及Chrome 的路径下 例如: C:\Program Files\Google\Chrome\Applicati…

算法通关村第十一关——搞清位运算

源码、反码和补码 很多人都记不清源码、反码和补码的区分,都是二进制,其实记忆起来很简单,分为正数和负数来记。正数的原码、反码和补码都是一样的,负数的原码符号位为1,反码是在原码的基础上进行改变:保持…

6. 使用python将多个Excel文件合并到同一个excel-附代码解析

【目录】 文章目录 6. 使用python将多个Excel文件合并到同一个excel-附代码解析1. 目标任务2. 结果展示3. 代码示例4. 代码解析4.1 导入库4.2 调用库的类、函数、变量语法4.3 os.listdir-返回目录中的文件名列表4.4 startswith-用于判断一个字符串是否以指定的前缀开头4.5 ends…

Netty入门学习和技术实践

Netty入门学习和技术实践 Netty1.Netty简介2.IO模型3.Netty框架介绍4. Netty实战项目学习5. Netty实际应用场景6.扩展 Netty 1.Netty简介 Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具&…