Spring中的事务实现、失效场景即AOP的相关概念理解

spring实现事务(声明式事务)的本质就是aop完成的,它会对方法的前后进行拦截,在执行方法之前开启事务,在执行完目标方法之后根据执行情况提交或回滚事务。aop就是面向切面编程,在spring中将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降低耦合度,事务处理就是其中一项重要应用。事项spring中的事务有两种方式编程式事务和声明式事务,其中编程式事务对业务代码有侵入性,项目中很少使用,应用更为广泛的是声明式事务。

spring中的事务在下面一些情况下会失效:

1.如果方法上自己处理捕获了目标的异常,没有抛出,就会导致事务失效。(原因:事务通知只有捕捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉)如:@Transactional注解标注的方法中try{有异常的代码}catch(Exception e){e.printStackTrace();}。解决方法:在catch块添加throw new RuntimeException(e)抛出。

2.方法抛出检查异常,报错也会导致事务失效。如:@Transactional注解标注的方法throws IOException(或其实现类如FileNotFoundException)(原因:Spring默认只会回滚非检查异常).解决方法:配置rollbackFor属性,如注解写为@Transactional(rollbackFor=Exception.class)

3.方法上不是public修饰的,也会导致事务失效(原因:spring为方法创建代理、添加事务通知前提条件都是方法是public的),解决方法:方法修饰词改成public。

AOP除了事务处理外还可以用来记录系统的操作日志。主要思路:使用aop中的环绕通知,用切点表达式找到记录日志的方法,也可以自定义注解(@annotation:指定一个注解,凡是标有此注解的方法都是切点,更推荐),然后通过环绕通知的参数获取请求方法的参数,比如类名、方法名、参数、返回值、异常信息、日志结果等,获取到这些参数后,保存到数据库

@Aspect
@Component
public class LoggingAspect {private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);@Pointcut("execution(* com.example.account.*.*(..))")public void accountOperation() {}@Before("accountOperation()")public void logBefore(JoinPoint joinPoint) {logger.info("Starting {} at {}", joinPoint.getSignature().getName(), LocalDateTime.now());}@AfterReturning(pointcut = "accountOperation()", returning = "result")public void logAfter(JoinPoint joinPoint, Object result) {logger.info("Finished {} at {} with result {}", joinPoint.getSignature().getName(), LocalDateTime.now(), result);}
}

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

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

相关文章

【硬核】javascript轻松实现自动化批量取消某音用户关注功能

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起学习和进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&a…

SQL世界之函数+语句(九,十)

目录 一、SQL 函数 1.函数的语法 2.函数的类型 1.合计函数(Aggregate functions) 2.Scalar 函数 二、SQL AVG 函数 1.AVG 函数 2.SQL AVG() 语法 3.SQL AVG() 实例 三、SQL COUNT() 函数 1.COUNT() 函数 2.SQL COUNT() 语法 3.SQL COUNT(co…

高程 | 继承与派生(c++)

文章目录 📚继承的概念和语法📚派生类生成过程📚继承权限和继承方式🐇公有继承🐇私有继承🐇保护继承 📚类型转换规则📚派生类构造函数和析构函数📚继承中的静态成员特性&…

Linux rp_filter、arp_filter、arp_ignore、arp_announce参数说明

Linux rp_filter、arp_filter、arp_ignore、arp_announce参数说明。我查看了参考资料,又去查阅了官方文档,凭着我的理解整理了以下文档。各位大神的文档写的很好,但都不喜欢断句啊,读的我这叫一个累。 参考 1.网络编程之网络丢包…

poetry,一个超实用的 Python 库!

文章目录 什么是 Python Poetry?安装 Python PoetryPython Poetry 的主要特性1. 简洁易用的依赖定义2. 虚拟环境管理3. 依赖解析和锁定4. 包管理和发布 使用 Python Poetry 管理项目依赖1. 创建新项目2. 添加依赖3. 安装依赖4. 移除依赖5. 更新依赖6. 查看当前依赖列…

IDEA工程与模块管理

一、IDEA项目结构 层级关系: project(工程) - module(模块) - package(包) - class(类)具体的: 一个project中可以创建多个module一个module中可以创建多个package一个package中可以创建多个class二、Project和Module的概念 在 IntelliJ IDEA 中&…

机器学习——聚类问题

📕参考:西瓜书ysu老师课件博客(3)聚类算法之DBSCAN算法 - 知乎 (zhihu.com) 目录 1.聚类任务 2.聚类算法的实现 2.1 划分式聚类方法 2.1.1 k均值算法 k均值算法基本原理: k均值算法算法流程: 2.2 基于…

MySQL 基础入门指南:从安装到基本操作

一、简介 MySQL 是一种流行的开源关系型数据库管理系统,被广泛用于各种规模和类型的应用程序中。如果您对 MySQL 还不熟悉,本文将为您提供一个基础的入门指南,从安装到基本操作。 1.1 安装 MySQL 首先,您需要下载并安装 MySQL。…

GD32F303VET6裸板调试遇到问题

1、开始串口中断的时候会死机:nvic_irq_enable(USART0_IRQn, 3, 0); 解决:要设置中断优先级分组: nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0); 2、初始化的时候多几次使用 printf 会HardFault_Handler: 解决:因为RTOS中…

《剑指offer》

本专题是分享剑指offer的一些题目,开始刷题计划。 二维数组的中的查找【https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId13&tqId11154&ru/exam/oj】 描述 在一个二维数组array中(每个一维数组的长度相同&#xff0…

大端和小端传输字节完整版

大端和小端传输字节序 大端和小端一、最高有效位、最低有效位1.MSB(Most significant Bit)最高有效位2.LSB(Least Significant Bit)最低有效位 二、内存地址三、大端和小端四、网络字节序和主机字节序五、C#位操作符六、C#中关于大端和小端的转换七、关于负数八、关于汉字编码以…

论文阅读 - Non-Local Spatial Propagation Network for Depth Completion

文章目录 1 概述2 模型说明2.1 局部SPN2.2 非局部SPN2.3 结合置信度的亲和力学习2.3.1 传统正则化2.3.2 置信度引导的affinity正则化 3 效果3.1 NYU Depth V23.2 KITTI Depth Completion 参考资料 1 概述 本文提出了一种非局部的空间传播网络用于深度图补全,简称为…

Docker安装Harbor

参考文档: Docker安装Harbor[基础服务] [Docker] Harbor 安装和配置

边缘计算:重塑数字世界的未来

引言 随着物联网(IoT)设备的激增和5G网络的普及,我们正站在一个计算模式的新纪元门槛上——边缘计算。这一技术范式将数据处理和分析推向网络的边缘,即设备或终端,为实时性要求较高的应用提供了前所未有的可能性。 目…

代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

文章目录 977.有序数组的平方题目代码思考 209.长度最小的子数组题目代码思考 59.螺旋矩阵II题目代码思考 977.有序数组的平方 题目 题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/ 给你一个按 非递减顺序 排序的整数数组 nums,返…

【开源】新生报到网站 JAVA+Vue.js+SpringBoot+MySQL

本文项目编号: T 002 。 \color{red}{本文项目编号:T002。} 本文项目编号:T002。 目录 1 功能模块1.1 在线交流模块1.2宿舍分配模块1.3 校园概况模块1.4 专业管理模块 2 系统展示3 核心代码3.1 图表展示3.2 查询评论3.3 新增报道 4 免责声明 …

2024春节联欢晚会刘谦魔术分析

春晚已经越来越拉胯了,看着节目单没一个能打的,本来想说:办不起,就别办呗。 没想到第二天刘谦的魔术以一种很奇特的姿势火起来了,干脆蹭个热度,分析下魔术的原理。 魔术1 这个不算什么新奇的节目&#xf…

android aidl进程间通信封装通用实现

接上一篇的分析,今天继续 aidl复杂流程封装-CSDN博客 今天的任务就是将代码梳理下放进来 1 项目gradle配置: 需要将对应的代码放到各自的目录下,这里仅贴下关键内容,细节可以下载代码慢慢看 sourceSets { main { manifest.srcFile src/main/And…

django-filter使用

在 Django 中,django-filter 是一个第三方库,它提供了易于使用和灵活的过滤功能,用于 Django 的视图和 API。使用 django-filter,你可以轻松地为你的模型创建查询集过滤器,并将其应用于你的视图和 API 端点&#xff0c…

春晚后台撒贝宁意外“踩高跷”,尼格买提内增高秘密笑翻全场。

♥ 为方便您进行讨论和分享,同时也为能带给您不一样的参与感。请您在阅读本文之前,点击一下“关注”,非常感谢您的支持! 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 龙年春晚无疑是观众们热议的焦点!除了尼格买提表演…