Spring aop切面编程

Spring aop切面编程

  • 如何使用
  • 利用@AuditAction创建切入点

如何使用

@Aspect	// 1. 创建一个类,用@Aspect注解标记它,表明这是一个切面类。
@Component
public class LoggingAspect {// 2. 定义切点:在通知方法上,使用切点表达式来指定哪些方法将被拦截。// 切点表达式定义了你的通知将应用于哪些方法。@Pointcut("execution(* com.example.service.*.*(..))")public void serviceLayer() {}// 3. 定义通知:在切面类中,定义你的通知方法(前置通知、后置通知、返回后通知、异常通知、环绕通知),// 并使用相应的注解(@Before、@After、@AfterReturning、@AfterThrowing、@Around)标记。@Around("serviceLayer()")// ProceedingJoinPoint对象是JoinPoint的子接口,该对象只用在@Around的切面方法中public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {Object proceed = joinPoint.proceed(); // 执行目标方法return proceed;}
}

通知是根据其类型,在切点指定的连接点(Join point)的内容执行的特定时间点执行的,主要的通知类型及其执行时机:

  1. 前置通知(Before advice):在切点指定的方法执行之前执行。
  2. 后置通知(After advice):在切点指定的方法执行之后执行,无论方法执行成功还是异常结束。⚠️ after注解的通知方法会在finally里,一定会执行。
  3. 返回后通知(After-returning advice):在切点指定的方法成功执行之后执行。
  4. 异常后通知(After-throwing advice):在切点指定的方法抛出异常后执行。
  5. 环绕通知(Around advice):在切点指定的方法执行前后都可以执行,甚至可以决定是否执行目标方法。

如果切点已有,可以隐式定义切点:

@After(value = "execution(public * mapper.*.delete*(..))")	
// 切点:mapper目录下的所有的delete开头的public方法public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {Object proceed = joinPoint.proceed(); // 执行目标方法return proceed;}

利用@AuditAction创建切入点

@AuditAction 注解用于标记在需要进行审计日志记录的方法上,通过指定操作类型和目标表来描述该方法的行为。这种标记方式为 AOP 提供了一个“切入点”(Pointcut),使得 AOP 可以识别出哪些方法需要进行特定的处理。

假设有一个切面 ChangeLogAop,它通过 AOP 拦截所有标记了 @AuditAction 的方法,并根据注解中的信息执行相应的日志记录操作:

@Aspect
@Component
public class ChangeLogAop {// 拦截标记了 @AuditAction 注解的方法@After(value = "@annotation(auditAction)", argNames = "joinPoint,auditAction")public void doAudit(JoinPoint joinPoint, AuditAction auditAction) {// 根据 auditAction 中的信息(如操作类型和目标表)执行日志记录等操作}
}

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

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

相关文章

案例|200多套设备实时监测,守护江西彰湖水库安全

中型水库作为水利建设的重要组成部分,在防洪、供水、农业灌溉、改善民生和生态效益等方面都具有重要意义。国务院发布《关于切实加强水库除险加固和运行管护工作的通知》,重点提出要提升信息化管理能力,要加快建设水库雨水情测报、大坝安全监…

【XR806开发板试用】SPI驱动数码管显示

准备工作 安装repo 创建repo安装目录。 mkdir ~/bin下载repo wget https://storage.googleapis.com/git-repo-downloads/repo -P ~/bin/改变执行权限 chmod ax ~/bin/repo设置环境变量,在~/.bashrc文件的最后输入 export PATH~/bin:$PATH和export REPO_URLhttps://…

分布式光纤测温DTS的测温范围是多少?

分布式光纤测温DTS的测温范围不仅仅取决于光缆的感温能力,还受到多种复杂因素的影响。尽管高温光缆可以耐高温,低温光缆可以耐低温,甚至镀金光缆能够耐受高达700摄氏度的极高温度,然而,这些因素并不能完全解释测温范围…

Jmeter性能测试(六)

一、查询数据库进行参数化步骤 1、添加并配置JDBC Connection Configuration 2、添加并配置JDBC Request 3、添加并配置循环控制器组件 4、添加并配置计数器组件(控制循环中的变量取值) 5、通过函数助手生成引用变量名 6、引用变量进行参数化 二、添加配置JDBC Connection Co…

3万字长文看懂Django面试

目录 Django框架的核心设计哲学是什么? 解释Django中的MTV模式与MVC模式的区别。

zookeeper启动后占用8080端口问题分析及解决

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。它为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 我们经常在运行zookeeper服务时,不需要配置服务端口,…

MySQL 性能模式 performance_schema

文章目录 前言1. 性能模式特点2. 开启性能模式3. 性能模式表分类3.1 采集设置表3.2 实例信息表3.3 等待事件记录表3.4 阶段性事件记录表3.5 语句事件记录表 后记 前言 performance_schema 是 MySQL 提供的一个较为底层的监控,它可以监控数据库中每个线程的所有动作…

运用分支结构与循环结构写一个猜拳小游戏

下面我们运用平常所学的知识来写一个小游戏,这样能够加强我们学习的趣味性,并且能够更加的巩固我们所学的知识。 游戏代码: 直接放代码:(手势可以使用数字来代替,比如0对应石头,1对应剪刀&…

【Linux第四课 - git、gdb】git仓库的使用、dgb代码调试

目录 一 、gitgit、gitee、github的理解Linux中git的使用提交删除 二 、gdb - 调试工具进入gdb版本gdb开始调试123、范围查找 一 、git 在linux中使用 分支管理、多人协作 git、gitee、github的理解 git是版本控制工具,gitee和github是网站 Linux中git的使用 提…

编程入门(六)【Linux系统基础操作四】

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 🔥前言🚀if else条件控制基本的if语句带else的if语句嵌…

rancher 证书过期网页进不去 问题解决

参考文章:https://docs.rancher.cn/docs/rancher2.5/cluster-admin/certificate-rotation/_index/#%E6%A6%82%E8%BF%B0 一、问题故障描述: 查看 rancher 容器 日志 docker logs --tail 100 dfc1ef8e4f29提示以下信息: 2024/05/07 08:49:5…

Jmeter性能测试(四)

一、遇到问题解决思路 1、检查请求头是否正确 2、检查请求参数是否正确 3、检查鉴权信息是否正确 4、检查变量作用域 5、检查数据提取是否正确(正则/json提取器) 二、请求头检查 1、在Http信息头管理器查看 2、注意这里的变量作用域是全局的 三、请求参数检查 1、在查看结…

硬件知识积累 音频插座的了解,看音频插座的原理图来了解音频插座的引脚。

1. 音频接口 音频插座是一种用于连接音频信号线路的电子元件,常见于音频设备(如音响、耳机、话筒等)中。它的主要作用是将电子信号转化为声音信号,以满足人们对于音乐、电影、游戏等方面的需求。 根据插头形状的不同,音…

萤瓴优选:短视频带货新风口,普通人不可错过的黄金赛道!

随着电商行业的快速发展,短视频带货成为了现代营销中的一股新势力。在这个激烈竞争的市场环境中,如何找准一个适合自己的发展方向成为了很多人的关注焦点。2024年起,萤瓴优选应运而生,打造出了一个让普通人也能参与其中的短视频带…

Linux设置open files

临时设置 ulimit -n 1025 查看是否成功 ulimit -n 永久设置,网上很多说添加* soft nofile 65535 * hard nofile 65535但设置后不生效 vim /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 然后重新…

使用 Parallels Desktop 在 Mac 上畅玩 PC 游戏

我们不再需要接受 “Mac 不是为游戏而打造” 这一事实;Parallels Desktop 通过将电脑变成高性能的游戏设备,从而改变了一切。 Parallels Desktop 充分利用 Mac 硬件的强大功能,让您无缝畅玩 Windows 专享游戏。 性能得到提升,可玩…

##09 深入理解多层感知机(MLP):设计和训练一个MLP模型进行分类任务

文章目录 前言1. 多层感知机(MLP)基本概念1.1 工作原理1.2 激活函数2. 使用PyTorch构建MLP2.1 定义网络结构2.2 数据准备2.3 训练模型3. 实战演示:使用MLP进行手写数字分类3.1 模型评估4. MLP模型的调优和性能提升策略前言 多层感知机(MLP)是神经网络研究和应用中的基础模…

软件测试开发之-基于需求文档、设计文档、测试用例的测试答疑助手

本文将基于 LangChain 实现一个 mini 的实战案例。这次实战主要完成的任务,就是设计一个测试答疑助手,这个测试答疑助手的主要功能为基于本地的文档和数据,回答给出的自然语言问题,比如一些数据的统计,查找、组合。 示…

二总线,替代传统485总线通讯,主动上报方案简易实现方法

二总线通信设计专栏 《二总线,替代传统485总线通讯,选型及应用-CSDN博客》《二总线,替代传统485总线通讯,低成本直流载波方案实现及原理-CSDN博客》《二总线,替代传统485总线通讯,调试避坑指南之最大的电流…

【大数据】分布式数据库HBase下载安装教程

目录 1.下载安装 2.配置 2.1.启动hadoop 2.2.单机模式 2.3.伪分布式集群 1.下载安装 HBase和Hadoop之间有版本对应关系,之前用的hadoop是3.1.3,选择的HBase的版本是2.2.X。 下载地址: Index of /dist/hbase 配置环境变量&#xff1a…