60.Spring事务实现基本原理

这篇具有很好参考价值的文章主要介绍了60.Spring事务实现基本原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

60.Spring事务实现基本原理

使用注解

@EnableTransactionManagement

原理

  • 1.解析切面 ——> bean的创建前第一个bean的后置处理器进行解析advisor(pointcut(通过@Transacational解析的切点) , advise) (这个advisor 是通过@EnableTransactionManagement注册了一个配置类,该配置类就配置了adivsor)
  • 2.创建动态代理——> bean的初始化后调用bean的后置处理器进行创建动态代理(有接口使用jdk,没接口使用cglib), 创建动态代理之前会先根据advisor中pointCut 匹配@Transacational( 方法里面是不是有、类上面是不是有、接口或父类上面是不是有 ) , 匹配到就创建动态代理。
  • 3.调用: 动态代理
  • 4.创建一个数据库连接Connection, 并且修改数据库连接的autoCommit属性为false,禁止此连接的自动提交,这是实现Spring事务非常重要的一步
  • 5.然后执行目标方法方法,方法中会执行数据库操作sql
  • 6.如果出现了异常,并且这个异常是需要回滚的就会回滚事务,否则仍然提交事务
  • 7.执行完当前方法后,如果没有出现异常就直接提交事务

扩展小课堂

Spring事务实现基本原理

Spring本身并不实现事务,Spring事务的本质还是底层数据库对事务的支持,没有数据库 事务的支持,Spring事务就不会生效。
例如:使用JDBC 操作数据库,使用事务的步骤主要分为如下5步:

  • 获取连接 Connection con = DriverManager.getConnection();
  • 开启事务con.setAutoCommit(true/false);
  • 执行CRUD;
  • 提交事务/回滚事务 con.commit() / con.rollback();
  • 关闭连接 conn.close();

采用Spring事务后,只需要 关注第三步的实现,其他的步骤都是Spring自动完成。
Spring事务的本质其实就是数据库对事务的支持,Spring只提供统一事务管理接口,具体实现都是由各数据库自己实现。

Spring事务使用

Spring事务管理有两种方式:编程式事务管理、声明式事务管理。

  • 编程式事务
    所谓编程式事务指的是通过编码方式实现事务,允许用户在代码中精确定义事务的边界。
    Spring团队通常建议使用TransactionTemplate进行程序化事务管理,如下所示:
    60.Spring事务实现基本原理,Spring最新全家桶面试1000道必考题,spring,springboot,spring,数据库,java,后端,spring boot,事务管理,AOP

  • 声明式事务
    声明式事务最大的优点:就是不需要通过编程的方式管理事务,只需在需要使用的地方标注@Transactional注解,就能为该方法开启事务了。如下所示
    60.Spring事务实现基本原理,Spring最新全家桶面试1000道必考题,spring,springboot,spring,数据库,java,后端,spring boot,事务管理,AOP

Spring事务实现原理

想要了解Spring事务的实现原理,一个绕不开的点就是Spring AOP,因为事务就是依靠Spring AOP实现的。
@EnableTransactionManagement是开启注解式事务的事务,如果注解式事务真的有玄机,那么@EnableTransactionManagement就是我们揭开秘密的突破口。
@EnableTransactionManagement注解源码如下:
60.Spring事务实现基本原理,Spring最新全家桶面试1000道必考题,spring,springboot,spring,数据库,java,后端,spring boot,事务管理,AOP
@EnableTransactionManagement注解,主要通过@Import引入了另一个配置TransactionManagentConfigurationSelector。
在 Spring中Selector通常都是用来选择一些Bean,向容器注册:AutoProxyRegistrar、ProxyTransactionManagementConfiguration两个Bean。
ProxyTransactionManagementConfiguration是一个配置类,实现类主要是TransactionInterceptor,这里会涉及Spring AOP实现切面逻辑织入。文章来源地址https://www.toymoban.com/news/detail-806787.html

到了这里,关于60.Spring事务实现基本原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring】事务实现原理

    在使用事务的时候需要添加@EnableTransactionManagement注解来开启事务,Spring事务底层是通过AOP来实现的,所以启用事务后,同样会向容器中注入一个代理对象创建器,AOP使用的是AnnotationAwareAspectJAutoProxyCreator,事务使用的是InfrastructureAdvisorAutoProxyCreator。 Advice通知:定义在切点上

    2024年02月05日
    浏览(50)
  • Spring事务传播机制、实现方式、失效场景即原理

    贴一篇源码分析的好文章:https://blog.csdn.net/qq_30905661/article/details/114400417 一个事务对应一个数据库连接。 通过 this 来调用某个带有 @Transactional 注解的方法时,这个注解是失效的 spring事务底层是通过数据库事务和AOP实现的 首先对于使用@Transactional的注解的bean,spring会创建一个

    2024年02月14日
    浏览(37)
  • 38、Spring事务的实现方式和原理以及隔离级别

    在使用Spring框架时,可以有两种使用事务的方式,一种是编程式的,一种是申明式的,@Transactional注解就是申明式的。 首先,事务这个概念是数据库层面的,Spring只是基于数据库中的事务进行了扩展,以及提供了一些能让程序员更加方便操作事务的方式。 比如我们可以通过在

    2024年02月16日
    浏览(43)
  • 【Spring面试全家桶】@Primary注解你真的会用吗

    @Primary注解是Spring Framework中的一个注解,用于标记具有多个实例的Bean的主要实例。以下是关于@Primary注解的知识点: @Primary注解的作用:@Primary注解用于标记具有相同类型的多个实例中的主要实例。当一个Bean需要注入这种类型的Bean时,Spring会注入使用@Primary注解标记的主要实

    2024年01月18日
    浏览(41)
  • 【Spring面试】八、事务相关

    答案: 即ACID: 原子性 ,Atomicity,即事务包含的所有操作要么同成功,要么同失败 一致性 ,Cosistency,即事务必须使得数据库从一个一致性状态到两一个一致性状态。如用户A和用户B两者的钱加起来一共5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相

    2024年02月07日
    浏览(40)
  • 【Spring源码】Spring事务原理

    目录 1、什么是事务 2、Spring事务基本概念 2.1、基础配置 2.1.1、Spring事务的基础配置 2.1.2、Spring事务的传播特性 2.1.3、Spring事务的隔离级别 2.2、基本原理 3、事务嵌套 3.1、PROPAGATION_REQUIRED 3.2、PROPAGATION_REQUIRES_NEW 3.3、PROPAGATION_SUPPORTS 3.4、PROPAGATION_NESTED 4、源码看事务 5、事务失

    2023年04月08日
    浏览(34)
  • Spring 声明式事务 @Transactional(基本使用)

            声明式事务的实现很简单,只需要在需要事务的⽅法上添加 @Transactional 注解就可以实现了.⽆需⼿动开启事务和提交事务,进⼊⽅法时⾃动开启事务,⽅法执⾏完会⾃动提交事务,如果中途发⽣了 没有处理的异常会⾃动回滚事务.         废话不多说,直接看代码实现,

    2024年01月23日
    浏览(50)
  • 【JavaEE】Spring全家桶实现AOP-统一处理

    【JavaEE】AOP(2) 在前面的Spring AOP的学习之中,Spring AOP去实现AOP,虽然比较灵活,可以实现很多想法,但是也有一些现实的问题: 没办法获取到HttpRequest,一些功能难以实现 进而无法获取HttpSession对象,这样登录校验功能就无法实现 我们要对⼀部分方法进行拦截,而另⼀部

    2024年02月11日
    浏览(39)
  • Spring 声明式事务 @Transactional(详解)【面试重点,小林出品】

            关于 @Transactional 注解的基本使用,推荐看Spring 声明式事务 @Transactional(基本使用)         本篇博客主要学习 @Transactional 注解当中的三个常⻅属性:         1. rollbackFor:异常回滚属性.指定能够触发事务回滚的异常类型.可以指定多个异常类型         2. Iso

    2024年01月25日
    浏览(49)
  • spring中的事务及底层原理

    在Spring框架中,事务管理是一个关键的特性,它允许开发者在应用程序中声明性地管理事务。Spring事务管理的核心是基于AOP(面向切面编程)和IOC(控制反转)的思想。以下是Spring中事务管理的一些重要概念和底层原理: 事务管理器(Transaction Manager): Spring事务管理的底层

    2024年01月19日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包