iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java Spring AOP源码解析中的事务实现原理是什么
  • 501
分享到

Java Spring AOP源码解析中的事务实现原理是什么

2023-06-22 07:06:24 501人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关Java spring aop源码解析中的事务实现原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。不用Spring管理事务?让我们先来

这篇文章将为大家详细讲解有关Java spring aop源码解析中的事务实现原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

不用Spring管理事务?

让我们先来看一下不用spring管理事务时,各种框架是如何管理事务的

使用JDBC来管理事务

Java Spring AOP源码解析中的事务实现原理是什么

使用Hibernate来管理事务

Java Spring AOP源码解析中的事务实现原理是什么

业务逻辑和事务代码是耦合到一块的,并且和框架的具体api绑定了。当我们换一种框架来实现时,里面对事务控制的代码就要推倒重写,并不一定能保证替换后的api和之前的api有相同的行为。

基于这些问题,Spring抽象了一些事务相关的顶层接口,我们面向接口编程,换框架时只要换具体的实现即可。有点像JDBC API的味道了

Java Spring AOP源码解析中的事务实现原理是什么

常用api接口
PlatfORMTransactionManager对事务进行管理
TransactionDefinition定义事务的相关属性,例如隔离级别,传播行为
TransactionStatus保存事务状态

针对不同的数据访问技术,使用不用的PlatformTransactionManager类即可

数据访问技术PlatformTransactionManager实现类
JDBC/mybatisDataSourceTransactionManager
HibernateHibernateTransactionManager
JpaJpaTransactionManager
JmsJmsTransactionManager

编程式事务管理

使用PlatformTransactionManager

Java Spring AOP源码解析中的事务实现原理是什么

Java Spring AOP源码解析中的事务实现原理是什么

Java Spring AOP源码解析中的事务实现原理是什么

使用TransactionTemplate

当我们直接使用PlatformTransactionManager来管理事务时,有很多模版代码。例如业务代码正常执行,提交事务,否则回滚事务。我们可以把这部分模版代码封装成一个模版类,这样使用起来就很方便了,如下所示

Java Spring AOP源码解析中的事务实现原理是什么

如下图所示,TransactionTemplate#execute方法就是一个典型的模版方法

Java Spring AOP源码解析中的事务实现原理是什么

我们可以传入如下2个接口的实现类来执行业务逻辑,TransactionCallback(需要返回执行结果)或TransactionCallbackWithoutResult(不需要返回结果)

声明式事务管理

为了让使用更加简洁,Spring直接把事务代码的执行放到切面中了,我们只需要在业务代码方法上加上一个@Transactional注解即可,这种方式我们最常用哈

使用@Transactional注解

此时事务相关的定义我们就可以通过@Transactional注解来设置了

属性名类型描述默认值
value(和transactionManager互为别名)String当在配置文件中有多个PlatformTransactionManager ,用该属性指定选择哪个事务管理器字符串""
propagation枚举:Propagation事务的传播行为REQUIRED
isolation枚举:Isolation事务的隔离度DEFAULT
timeoutint事务的超时时间。如果超过该时间限制但事务还没有完成,则自动回滚事务-1
readOnlyboolean指定事务是否为只读事务false
rollbackForClass[]需要回滚的异常数组{}
rollbackForClassNameString[]需要回滚的异常类名空数组{}
noRollbackForClass[]不需要回滚的异常空数组{}
noRollbackForClassNameString[]不需要回滚的异常类名空数组{}

Java Spring AOP源码解析中的事务实现原理是什么

源码解析

我们需要在配置类上加上@EnableTransactionManagement注解,来开启spring事务管理功能,@EnableTransactionManagement最主要的功能就是注入一个TransactionInterceptor拦截器,来控制事务开启,提交或者回滚

ProxyTransactionManagementConfiguration

Java Spring AOP源码解析中的事务实现原理是什么

TransactionInterceptor#invoke

Java Spring AOP源码解析中的事务实现原理是什么

TransactionAspectSupport#invokeWithinTransaction

Java Spring AOP源码解析中的事务实现原理是什么

TransactionAspectSupport#createTransactionIfNecessary

Java Spring AOP源码解析中的事务实现原理是什么

当开启事务的时候,可以看到各种传播属性的行为

AbstractPlatformTransactionManager#getTransaction

Java Spring AOP源码解析中的事务实现原理是什么

Spring事务的传播行为在Propagation枚举类中定义了如下几种选择

支持当前事务

  • REQUIRED :如果当前存在事务,则加入该事务。如果当前没有事务,则创建一个新的事务

  • SUPPORTS:如果当前存在事务,则加入该事务 。如果当前没有事务, 则以非事务的方式继续运行

  • MANDATORY :如果当前存在事务,则加入该事务 。如果当前没有事务,则抛出异常

不支持当前事务

  • REQUIRES_NEW :创建一个新事务,如果当前存在事务,则把当前事务挂起

  • NOT_SUPPORTED : 以非事务方式运行,如果当前存在事务,则把当前事务挂起

  • NEVER : 以非事务方式运行,如果当前存在事务,则抛出异常

其他情况

  • NESTED :如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来执行 。如果当前没有事务,则该取值等价于REQUIRED

以NESTED启动的事务内嵌于外部事务中 (如果存在外部事务的话),此时内嵌事务并不是一个独立的事务,它依赖于外部事务。只有通过外部事务的提交,才能引起内部事务的提交,嵌套的子事务不能单独提交

关于Java Spring AOP源码解析中的事务实现原理是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Java Spring AOP源码解析中的事务实现原理是什么

本文链接: https://www.lsjlt.com/news/303505.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java Spring AOP源码解析中的事务实现原理是什么
    这篇文章将为大家详细讲解有关Java Spring AOP源码解析中的事务实现原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。不用Spring管理事务?让我们先来...
    99+
    2023-06-22
  • Java Spring AOP源码解析之事务实现原理
    目录不用Spring管理事务?编程式事务管理使用PlatformTransactionManager使用TransactionTemplate声明式事务管理使用@Transactio...
    99+
    2024-04-02
  • spring源码阅读--aop实现原理讲解
    目录aop实现原理简介代理实现的处理器(BeanPostProcessor)代理实现的源头–AnnotationAwareAspectJAutoProxyCreatorAnnotat...
    99+
    2024-04-02
  • 如何进行Spring源码剖析AOP实现原理
    今天就跟大家聊聊有关如何进行Spring源码剖析AOP实现原理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言前面写了六篇文章详细地分析了Spring Bean加载流程,这部分完了...
    99+
    2023-06-02
  • spring中aop的执行原理是什么
    在Spring中,AOP(面向切面编程)的执行原理主要涉及以下几个方面:1. 切面的定义:通过注解或配置文件等方式,定义切面(Asp...
    99+
    2023-08-09
    spring aop
  • spring中ioc和aop的原理是什么
    Spring中的IOC(控制反转)和AOP(面向切面编程)是两个核心概念,它们的原理分别如下: 1、IOC(控制反转)的原理:IOC...
    99+
    2024-04-02
  • 从Spring源码解析事务失效的原因
    目录一、前言二、方法不是 public 的三、内部方法间调用导致事务失效四、异常类型是否配置正确五、异常被catch住一、前言 1.Bean是否是代理对象 2.入口函数是否是pub...
    99+
    2024-04-02
  • 浅析Spring的事务实现原理
    目录SQL事务实现简介编程式事务声明式事务注释事务属性源事务拦截器Bean工厂事务属性源指导事务多样性支持总结SQL事务实现简介 首先我们来了解下,最简单的事务是怎么实现的呢?以JD...
    99+
    2022-11-13
    Spring事务原理 Spring事务
  • Java详解HashMap实现原理和源码分析
    目录学习要点:1、什么是HashMap?2、HashMap的特性3、HashMap的数据结构4、HashMap初始化操作4.1、成员变量4.2、 构造方法5、Jdk8中HashMap...
    99+
    2024-04-02
  • 深度源码解析Java 线程池的实现原理
    目录线程池的优点线程池的实现原理ThreadPoolExecutor阻塞队列线程池工厂拒绝策略提交任务到线程池execute 方法submit 方法关闭线程池合理的参数7、本文小结j...
    99+
    2024-04-02
  • java线程池的实现原理源码分析
    这篇文章主要介绍“java线程池的实现原理源码分析”,在日常操作中,相信很多人在java线程池的实现原理源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java线程池的实现原理源码分析”的疑惑有所帮助!...
    99+
    2023-06-30
  • GoResiliency库中timeout实现原理及源码解析
    目录1.go-resiliency简介2.timeout模式3.源码实现如下4.扩展一下1.go-resiliency简介 ​ 今天看到项目里用到了go-resiliency这个库,...
    99+
    2023-05-19
    Go Resiliency库中的timeout Go Resiliency库 Go timeout
  • Redis源码类型的实现原理是什么
    这期内容当中小编将会给大家带来有关Redis源码类型的实现原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  Redis源码类型的实现原理有什么  Redis内部...
    99+
    2024-04-02
  • redis实现事务的原理是什么
    这篇文章主要介绍redis实现事务的原理是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!原子性(atomicity):一个事务是一个不可分割的最小工作单位,要么都成功要么都失败。...
    99+
    2024-04-02
  • Spring七大事务传递机制的实现原理是什么
    这篇“Spring七大事务传递机制的实现原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring七大事务传递机制...
    99+
    2023-07-05
  • Spring Cloud中Feign的实现原理是什么
    本篇内容主要讲解“Spring Cloud中Feign的实现原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Cloud中Feign的实现原理是什么”吧!目录一、什么是Fei...
    99+
    2023-06-20
  • innodb事务实现原理是什么
    InnoDB事务实现原理是通过使用多版本并发控制(MVCC)和日志重做(Redo)来确保事务的原子性、一致性、隔离性和持久性。1. ...
    99+
    2023-09-15
    innodb
  • spring注解的底层实现原理是什么
    Spring注解的底层实现原理主要依赖于Java的反射机制。在Spring中,通过使用注解来标识类、方法或字段,从而告诉Spring...
    99+
    2023-10-09
    spring
  • Spring中Aware接口的实现原理是什么
    今天就跟大家聊聊有关Spring中Aware接口的实现原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用示例:@Component&nbs...
    99+
    2024-04-02
  • Spring 中 load 方法的实现原理是什么?
    Spring 是一个流行的 Java 开发框架,它提供了很多方便的功能,其中之一是 load 方法。load 方法可以根据指定的类型和 ID 加载一个对象。在本文中,我们将深入探讨 Spring 中 load 方法的实现原理。 load ...
    99+
    2023-10-15
    load spring 编程算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作