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

3.学习笔记--Spring-AOP总结(p39)-Spring事务简介(P40)-Spring事务角色(P41)-Spring事务属性(P42)

1.AOP总结:面向切面编程,在不惊动原始基础上为方法进行功能增强。
2.AOP核心概念:
(1)代理:SpringAOP的核心是采用代理模式
(2)连接点:在SpringAOP中,理解为任意方法的执行
(3)切入点:匹配连接点的式子,也是具有共性功能的方法描述
(4)通知:若干个方法的共性功能,在切入点处执行,最终体现为一个方法。
(5)切面:描述通知和切入点的对应关系
(6)目标对象:被代理的原始对象成为目标对象
3.切入点表达式格式
(1)动作关键词(访问修饰符 返回值 包名.类名/接口名 (参数)异常名)
(2)切入点表达式描述通配符(快速描述、范围描述)
*:匹配任意符号(常用)
… :匹配多个连续的任意符号(常用)
+:匹配子类类型
4.通知类型
(1)前置通知
(2)后置通知
(3)环绕通知(important)
1)环绕通知依赖形参ProceedingJoinPoint才能实现对原始方法的调用
2)环绕通知开源隔离原始方法的调用执行
3)环绕通知返回值设为Object类型
4)环绕通知开源对原始方法调用过程中出现的异常进行处理。
(4)返回后通知
(5)抛出异常后通知
补充:
(1)获取切入点方法的参数:
JointPoint:适合前置、后置、返回后、抛出异常后通知,设置为方法的第一个形参。
ProceedJointPoint:适用于环绕通知
(2)获取切入点方法返回值
返回后通知
环绕通知
(3)获取切入点方法运行异常信息
抛出异常后通知
环绕通知
5.Spring事务简介
(1)事务作用:在数据层保障一系列数据库操作(同成功同失败)
(2)Spring事务作用:在数据层或业务层保障一些列的数据库操作(同成功同失败)
接口是public interface platformTransactionManager(平台事务管理器)
方法有commit、rollback
接口实现类是public class DataSourceTransactionManager
例子:模拟银行账户间转账业务
需求:实现任意两个账户间转账操作
(A账号减钱,B账户加钱)
1)数据层提供基础操作,指定账户减钱(outMoney),指定账户加钱(inMoney)
2)业务层提供转账操作(transfer),调用加钱和减钱操作。
3)提供2个账号和操作金额执行转账操作
4)基于Spring整合MyBatis环境搭建上述操作
结果分析:
原本数据库中A,B的账户金额都是1000.
1)程序正常执行,账户金额A-B+
2)程序出现异常后,转账失败。异常之前操作成功,异常之后操作失败,整体业务失败。
(3)在业务层的接口,添加注解@Transaction
在这里插入图片描述
(4)在jdbc的配置中,通过Bean引入平台事务管理器的操作(DataSource dataSource)
在这里插入图片描述
(5)接口实现类先注释掉异常
(6)运行test,成功在这里插入图片描述
(7)验证使用Trasaction事务之后数据库,会不会出现同成功同失败的效果。
在这里插入图片描述

在这里插入图片描述
总结:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
6.Spring事务角色
事务管理员、事务协调员
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
MybaticsConfig的SqlSessionFactory的DataSource和JdbcConfig的DataSource不是同一个,则不能运行成功。本次代码能运行成功,是因为他们是通过同一个数据源DataSource进行管理.
在这里插入图片描述
在这里插入图片描述
7.Spring事务属性
事务相关配置,案例:转账业务追加日志,事务传播行为
在这里插入图片描述
在这里插入图片描述

内存异常,运行异常才能回滚。IOException不回滚,出现这种情况,我们要在接口的事务中添加rollbackfor
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)案例:转账业务追加日志
需求:实现任意两个账户间转账操作,每次转账操作在数据库留痕。
(A减钱,B加钱,数据库记录日志)
1)基于转账操作案例添加日志模块实现数据库中记录日志
2)业务层转账操作(Transfer),调用减钱、加钱与记录日志功能,实现预期效果。
无论转账操作是否成功,都进行转账操作的日志留痕。
<1>REQUIRED(默认),事务管理员开启事务,事务协调员加入事务;事务管理员如果没有事务 ,事务协调员新建事务。(但是这个造成了如果在转账中出现了i/0异常,不管转账是否成功,日志的信息并不会在数据库出现,虽然金额没错保持原样,但是日志信息没有保存)
<2>REQUIRED_NEW,事务管理与开启事务,事务协调员可以新建事务;如果事务协调员没有事务,则事务协调员也会开启任务。所以要在业务层接口添加Spring事务,设置事务传播行为REQUIRES_NEW(需要新事务)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

  • vue MarkdownIt标签多出了<p>标签导致高度变丑
  • 【实战篇】导入dbc文件
  • 路由过滤实验
  • 【从零实现高并发内存池】thread cache、central cache 和 page cache 回收策略详解
  • 硅基光子学微环谐振器(MRR)技术进展与前沿热点
  • 将python项目打包成Windows后台服务
  • linux常用指令:文件目录类、文件查看类、压缩和解压类
  • Java设计开发商城抢票功能
  • 【文献笔记】LLM-based control code generation using image recognition
  • Redis——五种数据类型
  • 实验五 8255和LED数码管显示实验
  • AOSP的Doze模式-DeepIdle 初识
  • 从彩色打印单行标准九九表学习〖代码情书〗的书写范式(Python/DeepSeek)
  • 定制化 Docsify 文档框架实战分享
  • async-profiler火焰图找出耗CPU方法
  • # 04_Elastic Stack 从入门到实践(四)--2
  • Docker 设置镜像源后仍无法拉取镜像问题排查
  • postman莫名奇妙报错,可能是注释引起的。postman 过滤请求体中的注释。
  • Oracle 19c部署之数据库软件安装(二)
  • 细说STM32单片机FreeRTOS任务管理API函数及多任务编程的实现方法
  • 江西德安回应“义门陈遗址建筑被没收”:将交由规范的义门陈相关社会组织管理
  • 三大猪企一季度同比均实现扭亏为盈,营收同比均实现增长
  • 国家发改委下达今年第二批810亿超长期特别国债资金,支持消费品以旧换新
  • 连演三场,歌剧《义勇军进行曲》在上海西岸大剧院上演
  • 国家发改委:建立实施育儿补贴制度
  • 全过程人民民主研究基地揭牌,为推动我国民主政治建设贡献上海智慧