当前位置: 首页 > news >正文

SpringBootWeb AOP

SpringBootWeb AOP

事务管理

rollbackFor属性

propagation属性

 案例

AOP

基础

 进阶

通知类型

通知顺序

 切入点表达式

execution

@annotation

连接点

案例

实体类

接口方法

切面类


事务管理

rollbackFor属性

propagation属性

REQUIRED:大部分情况下都是用该传播行为即可。
REOUIRES_NEW:当我们不希望事务之间相互影响时,可以使用该传播行为。比如:下订单前需要记录日志,不论订单保存成功与否,都需要保证日志记录能够记录成功。

 案例

Grep Console插件可用于日志过滤筛选

AOP

基础

 进阶

通知类型

@Slf4j
@Component
@Aspect
public class MyAspect1 {@Pointcut("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")public void pt() {}@Before("pt()")public void before() {log.info("before ...");}@Around("pt()")public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {log.info("around before ...");//调用目标对象的原始方法执行Object result = proceedingJoinPoint.proceed();log.info("around after ...");return result;}@After("pt()")public void after() {log.info("after ...");}@AfterReturning("pt()")public void afterReturning() {log.info("afterReturning ...");}@AfterThrowing("pt()")public void afterThrowing() {log.info("afterThrowing ...");}
}

通知顺序

 切入点表达式

execution

//切面类
@Slf4j
@Aspect
@Component
public class MyAspect6 {//@Pointcut("execution(public void com.itheima.service.impl.DeptServiceImpl.delete(java.lang.Integer))")//@Pointcut("execution(void com.itheima.service.impl.DeptServiceImpl.delete(java.lang.Integer))")//@Pointcut("execution(void delete(java.lang.Integer))") //包名.类名不建议省略//@Pointcut("execution(void com.itheima.service.DeptService.delete(java.lang.Integer))")//@Pointcut("execution(void com.itheima.service.DeptService.*(java.lang.Integer))")//@Pointcut("execution(* com.*.service.DeptService.*(*))")//@Pointcut("execution(* com.itheima.service.*Service.delete*(*))")//@Pointcut("execution(* com.itheima.service.DeptService.*(..))")//@Pointcut("execution(* com..DeptService.*(..))")//@Pointcut("execution(* com..*.*(..))")//@Pointcut("execution(* *(..))") //慎用@Pointcut("execution(* com.itheima.service.DeptService.list()) || " +"execution(* com.itheima.service.DeptService.delete(java.lang.Integer))")private void pt(){}@Before("pt()")public void before(){log.info("MyAspect6 ... before ...");}}
@annotation

@annotation 切入点表达式,用于匹配标识有特定注解的方法。

连接点

在Spring中用JoinPoint抽象了连接点,用它可以获得方法执行时的相关信息,如目标类名、方法名、方法参数等。

对于 @Around 通知,获取连接点信息只能使用 ProceedingJoinPoint

对于其他四种通知,获取连接点信息只能使用JoinPoint,它是ProceedingJoinPoint 的父类型

//切面类
@Slf4j
@Aspect
@Component
public class MyAspect8 {@Pointcut("execution(* com.itheima.service.DeptService.*(..))")private void pt(){}@Before("pt()")public void before(JoinPoint joinPoint){log.info("MyAspect8 ... before ...");}@Around("pt()")public Object around(ProceedingJoinPoint joinPoint) throws Throwable {log.info("MyAspect8 around before ...");//1. 获取 目标对象的类名 .String className = joinPoint.getTarget().getClass().getName();log.info("目标对象的类名:{}", className);//2. 获取 目标方法的方法名 .String methodName = joinPoint.getSignature().getName();log.info("目标方法的方法名: {}",methodName);//3. 获取 目标方法运行时传入的参数 .Object[] args = joinPoint.getArgs();log.info("目标方法运行时传入的参数: {}", Arrays.toString(args));//4. 放行 目标方法执行 .Object result = joinPoint.proceed();//5. 获取 目标方法运行的返回值 .log.info("目标方法运行的返回值: {}",result);log.info("MyAspect8 around after ...");return result;}
}

案例

步骤
准备:
在案例工程中引入AOP的起步依赖
导入资料中准备好的数据库表结构,并引入对应的实体类
编码:
自定义注解 @Log
定义切面类,完成记录操作日志的逻辑
获取当前登录用户
获取request对象,从请求头中获取到jwt令牌,解析令牌获取出当前用户的id。

实体类

接口方法

切面类

@Slf4j
@Aspect
@Component
public class LogAspect {@Autowiredprivate OperateLogMapper operateLogMapper;@Autowiredprivate HttpServletRequest request;@Around("@annotation(com.itheima.anno.Log)")public Object recordLog(ProceedingJoinPoint joinPoint) throws Throwable {String jwt = request.getHeader("token");Claims claims = JwtUtils.parseJWT(jwt);Integer operateUser = (Integer)claims.get("id");LocalDateTime operateTime= LocalDateTime.now();String className = joinPoint.getTarget().getClass().getName();String methodName = joinPoint.getSignature().getName();Object[] args = joinPoint.getArgs();String methodParams = Arrays.toString(args);long begin = System.currentTimeMillis();Object result=joinPoint.proceed();long end = System.currentTimeMillis();String returnValue = JSONObject.toJSONString(result);Long costTime = end - begin;OperateLog oprateLog= new OperateLog(null,operateUser,operateTime,className,methodName,methodParams,returnValue,costTime);operateLogMapper.insert(oprateLog);log.info("aop记录日志成功{}",oprateLog);return result;}
}

相关文章:

SpringBootWeb AOP

SpringBootWeb AOP 事务管理 rollbackFor属性 propagation属性 案例 AOP 基础 进阶 通知类型 通知顺序 切入点表达式 execution annotation 连接点 案例 实体类 接口方法 切面类 事务管理 rollbackFor属性 propagation属性 REQUIRED:大部分情况下都是用该传播行为…...

傅里叶分析之掐死教程(完整版)更新于2014.06.06

作 者:韩 昊 知 乎:Heinrich 微 博:花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。 转载的同学请保留上面这句话,谢谢。如果…...

macOS终端配置自动补全功能

如何在macOS终端中配置自动补全功能 终端是一个非常强大的工具,它可以用来完成很多任务,比如创建、复制、移动、删除文件,执行脚本和运行程序。不过它的默认设置对用户不太友好,作为开发者,我们通常习惯代码编辑器的辅…...

华为---MUX VLAN简介及示例配置

目录 1. 产生背景 2. 应用场景 3. 主要功能 4. 基本概念 5. 配置步骤及相关命令 6.示例配置 6.1 示例场景 6.2 网络拓扑图 6.3 配置代码 6.4 配置及解析 6.5 测试验证 配置注意事项 1. 产生背景 MUX VLAN(Multiplex VLAN)提供了一种通过VLA…...

docker详解介绍+基础操作 (四)容器镜像

一.镜像结构和原理 Docker 镜像是 Docker 技术的核心组成部分之一,它用于封装应用程序及其依赖项,以便在任何支持 Docker 的环境中运行。了解 Docker 镜像的结构和原理对于有效使用 Docker 至关重要。以下是对 Docker 镜像结构和原理的详细介绍。 Dock…...

PostgreSQL数据库定期清理归档(pg_wal)日志

一、配置归档模式 在postgresql.conf文件中设置archive_mode on来启用归档功能。 二、设置归档命令 同样在postgresql.conf中,设置archive_command参数,指定一个shell命令来处理归档日志,例如: archive_command cp %p /home/…...

RTTI介绍

RTTI介绍 RTTI(Run-Time Type Information,运行时类型信息)是C的一项功能,它允许在程序运行时检查对象的类型。RTTI的主要作用是在多态(polymorphism)场景中,可以在运行时安全地转换对象类型或…...

【C#生态园】C#推送通知库大比拼:选择最适合你项目的库

提升用户体验:C#推送通知库详细评测及比较 前言 在移动应用开发中,推送通知是一个至关重要的功能。它可以帮助应用保持与用户的互动,及时传递重要信息,提升用户体验。本文将介绍几个用于C#的推送通知库,帮助开发者了…...

乐歌E5,E6系列升降桌质量如何?2024推荐必买的四款热销型号

在数字化时代,电脑桌成为了我们日常生活和工作中不可或缺的一部分。然而,长时间坐在固定高度的电脑桌前,不仅会影响我们的工作效率,还可能对身体健康造成不良影响。因此,一款能够电动升降的电脑桌显得尤为重要。 乐歌…...

Android广播

文章目录 1.收发应用广播1.标准广播2.有序广播3.广播的静态注册 2.监听系统广播1.接受分钟到达广播2.接受网络变更广播3.定时管理器AlarmManager 3.捕捉屏幕的变更事件1.竖屏和横屏切换2.回到桌面与切换到任务列表 1.收发应用广播 1.标准广播 广播的收发过程分为三个步骤&…...

Chapter 2 - 3. Understanding Congestion in Fibre Channel Fabrics

B2B Credit Counters Figure 2-3 shows the following counters on an FC port: 图 2-3 显示了 FC 端口上的以下计数器: 1. Rx B2B credits: The number of receive buffers of an FC port. This value does not change while the port is up. FC 端口的接收缓冲区数量。该值…...

014 属性分组

文章目录 后端AttrGroupEntity.javaCategoryEntity.javaAttrGroupController.javaCategoryServiceImpl.java 前端attrgroup-add-or-update.vue https://element.eleme.cn/#/zh-CN/component/cascader 后端 AttrGroupEntity.java package com.xd.cubemall.product.entity;impo…...

ElasticSearch备考 -- Alias

一、题目 1) Create the alias hamlet that maps both hamlet-1 and hamlet-2 Verify that the documents grouped by hamlet are 8 2) Configure hamlet-3 to be the write index of the hamlet alias 二、思考 可以通过指定别名,来指向一个或多个索引&#xff0c…...

使用AI编码,这些安全风险你真的了解吗?

前言 随着AI技术的飞速发展与普及,企业开发人员对AI编码助手工具如Copilot的依赖度日益增强,使用AI编码助手工具虽然能显著提升编程效率与质量,但同时也存在一系列的潜在风险。 许多开发人员可能未意识到,如果他们的现有代码库中…...

计算机网络实验一:组建对等网络

实验一 组建对等网络 实验要求: 1. 组建对等网络,会在命令行使用ipconfig,两网络能够相互ping通,尝试netstat 命令 2. 建立局域网共享文件夹 3. 安装packet tracer,模拟组建对等网并测试对等网 1、组建对等网络 连…...

R语言绘制折线图

折线图是实用的数据可视化工具,通过连接数据点的线段展示数据随时间或变量的变化趋势。在经济、科学、销售及天气预报等领域广泛应用,为决策和分析提供依据。它能清晰呈现经济数据动态、助力科学研究、反映企业销售情况、预告天气变化,以简洁…...

基于组合模型的公交交通客流预测研究

摘 要 本研究致力于解决公交客流预测问题,旨在通过融合多种机器学习模型的强大能力,提升预测准确性,为城市公交系统的优化运营和交通管理提供科学依据。研究首先回顾了公交客流预测领域的相关文献,分析了传统统计方法在处理大规…...

docker环境redis启动失败

现象&#xff1a; 查看日志错误为 Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename> 经查询为aof文件损坏导致&#xff0c;修复aof即可 解决方法&#xff1a; 1.查看执行的docker命令&…...

Pandas库详细学习要点

Pandas库是一个基于Python的数据分析库&#xff0c;它提供了丰富的数据结构和数据分析工具&#xff0c;非常适合数据科学和数据分析领域的工作。以下是Pandas库详细学习的一些要点&#xff1a; 1. 数据结构 - Series&#xff1a;一维带标签数组&#xff0c;类似于NumPy中的一…...

光路科技TSN交换机:驱动自动驾驶技术革新,保障高精度实时数据传输

自动驾驶技术正快速演进&#xff0c;对实时数据处理能力的需求激增。光路科技推出的TSN&#xff08;时间敏感网络&#xff09;交换机&#xff0c;在比亚迪最新车型中的成功应用&#xff0c;显著推动了这一领域的技术进步。 自动驾驶技术面临的挑战 自动驾驶系统需整合来自雷达…...

Ship-Score:自动化项目健康度评估工具的设计、实现与工程实践

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫cwklurks/ship-score。乍一看这个标题&#xff0c;你可能会有点摸不着头脑&#xff0c;这“ship-score”到底是个啥&#xff1f;是给船打分&#xff1f;还是某种评分系统&#xff1f;作为一个在软件开…...

Dell R730 2U服务器实战:解锁Nvidia P4计算卡在虚拟化环境下的AI训练潜能

1. 硬件准备与安装避坑指南 Dell PowerEdge R730作为一款经典的2U机架式服务器&#xff0c;在二手市场上性价比极高。我最近给实验室淘了两台二手R730&#xff0c;准备搭建AI训练集群。这次重点分享如何在这台服务器上安装Nvidia Tesla P4计算卡的经验。 先说说为什么选P4这张卡…...

深度解析AzurLaneAutoScript:碧蓝航线自动化脚本的技术架构与应用实践

深度解析AzurLaneAutoScript&#xff1a;碧蓝航线自动化脚本的技术架构与应用实践 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript…...

Obsidian笔记AI化:AnythingLLM带来的知识管理革新

Obsidian笔记AI化&#xff1a;AnythingLLM带来的知识管理革新 【免费下载链接】anything-llm The all-in-one AI productivity accelerator. On device and privacy first with no annoying setup or configuration. 项目地址: https://gitcode.com/GitHub_Trending/an/anyth…...

MemoryOS:开源时序知识图谱AI记忆系统

AI的记忆困局&#xff1a;为什么需要"时序"和"知识图谱"&#xff1f;用过ChatGPT或任何AI助手的人大概都有过这样的体验&#xff1a;昨天告诉AI自己住在北京&#xff0c;今天问它"我住哪儿"&#xff0c;它可能还能答对&#xff1b;但是过了两周&…...

Markmap 思维导图转换工具:3种方案解决Markdown可视化难题

Markmap 思维导图转换工具&#xff1a;3种方案解决Markdown可视化难题 【免费下载链接】markmap Build mindmaps with plain text 项目地址: https://gitcode.com/gh_mirrors/ma/markmap 在信息爆炸的时代&#xff0c;如何将结构化的Markdown笔记高效转换为直观的思维导…...

PPTist:5分钟创建专业演示文稿的免费开源在线PPT制作工具终极指南

PPTist&#xff1a;5分钟创建专业演示文稿的免费开源在线PPT制作工具终极指南 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, …...

猫抓插件:三步轻松下载网页视频音频资源的终极指南

猫抓插件&#xff1a;三步轻松下载网页视频音频资源的终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经在网上看到一个精彩的视频…...

开源KMS激活神器:3分钟搞定Windows和Office永久激活难题

开源KMS激活神器&#xff1a;3分钟搞定Windows和Office永久激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows和Office的激活问题烦恼吗&#xff1f;KMS_VL_ALL_AIO是一款开…...

Python异步编程与Discord机器人开发:pincer库实战指南

1. 项目概述与核心价值最近在折腾一个游戏服务器的后端&#xff0c;发现处理实时通信和状态同步这块儿&#xff0c;用传统的HTTP轮询或者WebSocket裸写&#xff0c;代码很快就变得又臭又长&#xff0c;维护起来简直是噩梦。就在我头疼的时候&#xff0c;社区里一个叫pincer的项…...