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

Spring中的AOP翻转的使用与在事务管理中的表现

Spring框架应该是作为Java开发耳熟能详的一个,并且要能够熟练掌握。但是里面知识点的零碎可能随着时间的流逝,一些知识也会变的陌生起来。Spring这一系列的文章主要是将自己对Spring的一些认识梳理一下,其中这篇文章讲的主要是AOP相关的。

在很早的时候也写过一篇将IOC容器的文章,供君参考,他从Java原生的事务讲起,引入为什么要进行事务,以及原生的事务管理有哪些缺点,我们通过怎么样的方法来进行改进——代理。那么AOP的出现给我们带来了哪些便捷,如果要是让我们自己用原生Java代码实现一个AOP框架那应该怎么做,如何实现。这篇文章也是自己的一篇长文,对于基础概念不是很扎实的同学推荐去看看。

https://blog.csdn.net/lmlzww/article/details/104684088?spm=1001.2014.3001.5501

1、AOP是什么,可以为我们提供什么?

  • 面向切面编程,是OOP的延续
  • 对业务逻辑的各个部分进行隔离,降低耦合度
  • 静非业务逻辑代码从业务逻辑代码中抽离出来

在开头推荐的文章中我们讲了从原生代码的事务管理到利用代理对代码进行封装,再到利用AOP来实现,实际上Spring框架可以看做是给我们提供了一套通过代理等技术对功能进行增强的框架。其中的事务管理是他的一个实现而已。这里我们只不过是拿事务管理这个场景引入AOP如何实现。源代码层面事务管理的实现思路:

  • 开启事务
  • 进行业务操作
  • 没有发生异常进行事务提交
  • 出现异常进行事务回滚

2、AOP中的动态代理的类型

  • 有接口的情况使用JDK动态代理即可,Proxy.newProxyInstance(),其中三个参数——目标类的来加载器、目标类的接口集、目标类的处理器对象
    • 单接口动态代理
    • 多接口动态代理
  • 没有接口使用CGLIB来进行动态代理:通过创建子类,来实现动态代理

3、AOP中的相关术语

  • 连接点:类中的那些方法可以被增强,那些方法就可以叫做连接点
  • 切入点:实际被真正增强的方法就叫做切入点
  • 通知/增强:实际增强的逻辑部分
    • 前置通知
    • 后置通知 @AfterReturning 有异常则不执行
    • 环绕通知
    • 异常通知
    • 最终通知——就像是finally的作用 @After 有无异常都执行
  • 切面:把通知应用到切入点的过程就是切面,他说的是一个动作

4、AOP操作

  • Spring框架一般基于AspectJ来实现AOP,AspectJ是一个单独框架可以单独使用
    • 基于XML配置文件
    • 基于注解实现
  • 切入点表达式是为了知道可以对类中的那个方法进行增强
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jV1f92AF-1663336655417)(F:\typroa\aimages\image-20220916214657256.png)]
  • 公共切入点抽取,使用@Pointcut进行抽取
    在这里插入图片描述
  • 多个增强类对个方法增强优先级的设置

在增强类上面添加一个@Order的注解,里面设置值,值越小优先级越高

5、通过配置文件实现AOP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0LQ1xrMZ-1663336655420)(F:\typroa\aimages\image-20220916214925354.png)]

6、Spring中如何进行事务管理

  • 事务一般添加到Service层中
  • 两种事务方式,有一个针对不同框架提供的实现类PlatformTransactionManager
    • 编程式事务管理、通过代码进行管理
    • 声明式事务管理
      • 基于注解进行实现
      • 基于xml的形式进行实现

7、基于注解进行事务管理的流程

  • 在Spring的配置文件中创建一个事务管理器
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tZ0g2SiH-1663336655420)(F:\typroa\aimages\image-20220915134745055.png)]

  • 在事务管理器中添加链接信息

  • 再Spring配置文件中开启事务注解
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VmeojUcs-1663336655421)(F:\typroa\aimages\image-20220915135128180.png)]

  • 在Service类上面添加事务注解@Transactional,如果要是添加到类则作用与所有的方法如果要是添加到方法上则只作用于一个方法

8、事务注解中详细的配置

  • propagation:事务传播行为
    • 当一个事务方法被另一个事务方法调用的时候应该如何处理
    • requeired:如果有事务在运行当前的方法就在这个事务内运行,否则就启动一个新的事务并在自己的事务内运行
    • required_new:当前方法必须启动新事物,并在自己的事务内运行,如果有事务在运行应该将它挂起
    • supports: 如果有事务在运行当前的方法就在这个事务内运行,否则他可以不运行在事务中
    • not_supported:当前方法不应该运行在事务中,如果有运行的事务则将它挂起
  • isolation:多事务操作之间不产生影响,对应的也就是数据库层面上的几种隔离级别
    • Read uncommitted
    • read committed
    • repeatable read
    • serializable
  • timeout:超时时间
    • 事务需要在一定时间内进行提交,如果不提交进行回滚
    • 默认的超时时间为-1,
  • readOnly:是否只读
    • 如果设置为只读那么这个事务内就只能够做查询操作
  • rollbackFor:回滚
    • 设置出现哪些异常进行回滚
  • noRollbackFo:不会滚
    • 设置出现哪些异常不进行回滚

6、全注解实现——主要是开启事务的配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LlcIBr97-1663336655422)(F:\typroa\aimages\image-20220915214738552.png)]

相关文章:

  • DataOps: A New Discipline 数据治理的下一步
  • 一些现代 Javascript 技巧
  • Java学习 --- 类方法(静态方法)
  • 网课答案搜题方法详细步骤
  • promise函数
  • 何云伟全国相声巡回演,首场定在北京吉祥戏楼,不知道送不送鸡蛋
  • 秋招面试!阿里、字节、美团等大厂面试我只刷这份《Java面试题》没想到还真拿下了offer!
  • Day741.Redis消息队列 -Redis 核心技术与实战
  • C 语言的特性
  • python使用xlwings模块生成excel文件、并将数据写入生成的excel文件中、将数据写入指定表单的指定单元格中
  • 游戏客户端--个人学习路线总结、指北
  • 电场与磁场中的物理量
  • 【C++】基础入门(一):域、命名空间、C++输入输出
  • Hadoop生态及Hive、HBase、Impala、HDFS之间的关系
  • 3D-NAND向500层进发,天花板在哪里?
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 77. Combinations
  • Bootstrap JS插件Alert源码分析
  • exif信息对照
  • gulp 教程
  • Java知识点总结(JavaIO-打印流)
  • PHP的Ev教程三(Periodic watcher)
  • Python3爬取英雄联盟英雄皮肤大图
  • Python学习笔记 字符串拼接
  • sublime配置文件
  • uva 10370 Above Average
  • Vue官网教程学习过程中值得记录的一些事情
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 译自由幺半群
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • - 转 Ext2.0 form使用实例
  • 如何在招聘中考核.NET架构师
  • 说说我为什么看好Spring Cloud Alibaba
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • ${factoryList }后面有空格不影响
  • (007)XHTML文档之标题——h1~h6
  • (day 12)JavaScript学习笔记(数组3)
  • (独孤九剑)--文件系统
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (算法)N皇后问题
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)jQuery 基础
  • .gitignore文件—git忽略文件
  • .Net - 类的介绍
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 设计模式初探
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • @Mapper作用
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网