1. spring事务的实现方式
    spring框架提供了两种事务实现方式:编程式事务、声明式事务
    编程式事务:在代码中进行事务控制。优点:精度高。缺点:代码耦合度高
    声明式事务:通过@Transactional注解实现事务控制
  2. spring事务的底层原理
    事务的操作本来应该由数据库进行控制,但是为了方便用户进行业务逻辑的控制,spring对事务功能进行了扩展实现。一般我们很少使用编程式事务,更多的是使用@Transactional注解实现。当使用了@Transactional注解后事务的自动功能就会关闭,由spring帮助实现事务的控制。
    Spring的事务管理是通过AOP代理实现的,对被代理对象的每个方法进行拦截,在方法执行前启动事务,在方法执行完成后根据是否有异常及异常的类型进行提交或回滚。
    Spring AOP动态代理机制:
    Spring在运行期间会为目标对象生成一个代理对象,并在代理对象中实现对目标对象的增强。
    SpringAOP通过两种动态代理机制,实现对目标对象执行横向植入的。
    代理技术 描述
    JDK 动态代理 Spring AOP 默认的动态代理方式,若目标对象实现了若干接口,Spring 使用 JDK 的 java.lang.reflect.Proxy 类进行代理。
    CGLIB 动态代理 若目标对象没有实现任何接口,Spring 则使用 CGLIB 库生成目标对象的子类,以实现对目标对象的代理。

原理:当在某个类或者方法上使用@Transactional注解后,spring会基于该类生成一个代理对象,并将这个代理对象作为bean。当调用这个代理对象的方法时,如果有事务处理,则会先关闭事务的自动功能,然后执行方法的具体业务逻辑,如果业务逻辑没有异常,那么代理逻辑就会直接提交,如果出现任何异常,那么直接进行回滚操作。当然我们也可以控制对哪些异常进行回滚操作。
底层原理图:

Spring事务实现的方式及底层原理相关推荐

  1. Spring事务的实现方式和实现原理

    Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的.Spring只提供统一事务管理接口,具体实现都是由各数据库自己实现,数据库事务的提交和回滚是通 ...

  2. 一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 31.线程池复用的原理 32.spring是什么? 33.对Aop的理解 34.对IOC的理解 35.BeanFactor ...

  3. 【MySQL进阶】MySQL事务隔离与锁机制底层原理万字总结(建议收藏!!)

    [MySQL进阶]MySQL事务隔离与锁机制底层原理万字总结(建议收藏!!) 参考资料: 美团技术团队:Innodb中事务隔离级别和锁的关系 数据库的锁,到底锁的是什么? 阿里面试:说说一致性读实现原 ...

  4. Spring事务的实现方式

    什么是事务? 说到事务,一般指的都是数据库中的事务. 是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作. 这些操作作为一个整体一起向系统提交,要么都执行.要么都不执行. 事务是一组不 ...

  5. JAVA→HashMap、常用方法、遍历方式、底层原理、初始化性能分析

    Map方法 HashMap HashMap()遍历 HashMap()四种遍历性能分析 HashMap()底层原理 HashMap()是否初始化大小性能分析 LinkedHashMap()

  6. 【Spring系列】- Bean生命周期底层原理

    Bean生命周期底层原理

  7. spring 事务的实现方式和原理_spring整合atomikos实现分布式事务

    前言 Atomikos 是一个为Java平台提供增值服务的并且开源类事务管理器,主要用于处理跨数据库事务,比如某个指令在A库和B库都有写操作,业务上要求A库和B库的写操作要具有原子性,这时候就可以用到 ...

  8. springaop事务逻辑原理_架构师:一篇文章掌握——Spring 事务管理

    对大多数Java开发者来说,Spring事务管理是Spring应用中最常用的功能,使用也比较简单.本文主要逐步介绍Spring事务管理的相关知识点及原理,作为Spring事务管理的学习总结. 一.关键 ...

  9. Spring事务配置的五种方式 说明

    Spring事务配置的五种方式  [转 http://blog.csdn.net/hjm4702192/article/details/17277669] Spring配置文件中关于事务配置总是由三个 ...

最新文章

  1. tf.keras.losses.CategoricalCrossentropy 多分类 交叉熵 损失函数示例
  2. java中setDocument_Java ActionItem.setDocumentId方法代码示例
  3. 阿里云Redis混合存储典型场景:如何轻松搭建视频直播间系统
  4. Visual Studio中相对路径中的宏定义,你不了解的宏定义都在这里!
  5. csv导入mysql phpmyadmin_关于mysql:使用phpMyAdmin导入大型csv文件
  6. Spark学习之路 (二十三)SparkStreaming的官方文档
  7. dd wrt php,HG255D(DDWRT)挂载U盘安装emlog和Discuz!教程
  8. 计算机控制系统与常规仪表控制系统的主要异同点,计算机控制统考试.doc
  9. Pspice仿真模型创建
  10. Linux服务器中查询IP地址五个方法
  11. 计算机cpu结构实物图片,cpu内部结构显微图/cpu内部结构放大图
  12. Django文档是如何组织的?
  13. c4d怎么导入fbx_c4d怎么导入模型?品索教你Maya模型文件如何导入到C4d
  14. 然而,随着下属人数的增多,下属各自 开始形成自己的权力主体。
  15. 请编程序将china译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如:字母A后面4个字母为E,因此,China应译为Glmre。
  16. 华为RH2288H V3服务器更换内存条
  17. c语言分离个位十位百位_C语言中 将一个3位数整数,正确分离出它的个位、十位和百位数字,并分别在屏幕上输出...
  18. PHPexcel 导出身份证处理
  19. 掘地三尺搞定 Redis 与 MySQL 数据一致性问题
  20. 【自学Java】Java数据类型

热门文章

  1. 暖通空调的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  2. 自己实现atoi函数
  3. 距阵乘以一个未知距阵得单位矩阵 怎么算_一个人可以 DIY 出什么高逼格的东西?...
  4. 基于jsp(java)网络教学平台系统的设计与实现
  5. java里break的使用方法_java中break,continue,return使用方法
  6. LINUX内核编译(ZT)
  7. Cisco Packet Tracer的简单使用
  8. win10在此计算机上找不到系统映像,图文教你win10系统使用DISM修复找不到源的问题....
  9. Cisco忘了enable密码怎么办
  10. VScode 一些快捷操作 删除空行