Spring事务源码详解-spring原码(二)

2023-10-27

上篇文章介绍了事务开启,前面介绍了解析adviors。

spring事务源码详解-spring原码(一)icon-default.png?t=N5K3https://blog.csdn.net/ke1ying/article/details/131360060

  • 事务源码

 

 

先从缓存里获取,主要是判断循环依赖是否创建动态代理

进去wrapIfNecessary

先if判断advised是不是需要增强bean

如果是advised增强bean不需要动态代理

再重复判断一下是否不是切入点一些类,是的话加入advised

这里通过getAdvicesAndAdvisorsForBean拿到我们之前配置的advices

 

通过AopUtils里的find找到我们可以用的advisors

这里主要拿到advisors的pointCut,和配置类里的事务属性源

 

这里也有缓存,提高性能

当我们的缓存为空,则去解析我们的注解

解析成事务属性transactionAttribute,解析到代表匹配成功

在computeTransaction方法里面,拿到我们最终方法(加入你当前类是个接口,会拿到你实现类的方法)

先根据方法解析,再根据实现类解析

当我们执行具体方法的时候,回来到我们动态代理类。

拿到我们之前解析的事务属性

在try之前开启事务

在catch里面回滚

在最后commit

如果有传播性的话,会根据事务传播行为来确定是否开启。

开启事务用createTransactionIfNecessary方法开启,判断是否有必要开启。

在这个里面会判断传播行为,一个一个判断。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring事务源码详解-spring原码(二) 的相关文章

  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • 在Spring中使用什么样的“EventBus”?内置、Reactor、Akka?

    我们将在几周后启动一个新的 Spring 4 应用程序 我们希望使用一些事件驱动的架构 今年 我到处读到有关 Reactor 的内容 在网上查找时 我偶然发现了 Akka 所以现在我们有3个选择 春天的ApplicationEvent ht
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • Calendar.getInstance(TimeZone.getTimeZone("UTC")) 不返回 UTC 时间

    我对得到的结果真的很困惑Calendar getInstance TimeZone getTimeZone UTC 方法调用 它返回 IST 时间 这是我使用的代码 Calendar cal Two Calendar getInstance
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 具有 java XSLT 扩展的数组

    我正在尝试使用 java 在 XSLT 扩展中使用数组 我收到以下错误 Caused by java lang ClassCastException org apache xpath objects XObject cannot be ca
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • 编辑文件名在 JComboBox 中的显示方式,同时保持对文件的访问

    我对 Java 很陌生 对堆栈溢出也很陌生 我正在尝试利用 JMF API 创建一个用 Java 编码的简单媒体播放器 到目前为止 我已经能够设置一个简单的队列 播放列表来使用JComboBox called playListHolder
  • Jersey 客户端请求中未设置 Content-Length-Header

    我正在使用 Jersey Client 访问网络服务 如下所示 response r accept MediaType TEXT PLAIN TYPE header content length 0 post String class 其中
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • ServletContainer 类未找到异常

    我无法再编译我的球衣项目 并且出现以下异常 GRAVE Servlet Project API threw load exception java lang ClassNotFoundException com sun jersey spi
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的

随机推荐

  • Nginx自动化部署脚本(在线离线均适用)

    bin bash Author Wang Dajiang Date 2023 01 18 FileName install nginx sh csdn https blog csdn net sinat 41836475 type blog
  • .net mysql 特殊字符转义字符_MySQL 特殊字符转义问题

    模糊查询时 很多特殊字符都是有特定意义的 比如 等 这些在模糊查询中都是通配符 如果用户在前端的输入是没有限制的 那么 一旦输入相关特殊字符 就会获得错误的查询结果 出于需求的细致要求 这个问题是需要解决的 在网上找了很多资料 发现能够完全
  • 基于k-means聚类算法的城市出租车GPS时空分布特征分析

    目录 前言 一 研究目的 二 数据源 三 数据预处理 3 1 通用预处理 3 2 删除出租车数据中载客状态瞬间变化的记录 3 3 获取OD数据 3 4 判断每一辆出租车的OD数据中最靠近整点时刻的记录 采用字典形式储存 3 5 将每一整点时
  • AIGC赋能教育

    在这个科技迅速进步的时代 全球教育领域正迎来一场前所未有的数字化和技术化变革 而AIGC则是代表了人工智能与教育的融合 它正在改变着学习方式 提高教育质量 并重新定义了教育的未来 我们正在亲眼目睹AIGC如何塑造着全球教育的格局 为学生 教
  • 最新IDE流行度最新排名(每月更新)

    2023年09月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多 这个IDE就被认为越受欢迎 原始数据来自谷歌Trends 如果您相信集体智慧 Top IDE索引可以帮助您决
  • 查看Linux服务器上当前机器监听的端口信息

    netstat lntp
  • 找不到viewModels,viewModels()

    谷歌官方文档上学习mvvm 当我写到private val model UserViewModel by viewModels 时 viewModels 爆红 查了资料 找到gradle 添加依赖 dependencies implemen
  • (二)Java常量与变量

    Java常量与变量 主要内容 标识符 关键字 变量 数据类型 类型转换 常量 一 标识符与关键字 1 标识符 类的名字就是标识符 标识符的命名规则 标识符只能由字母数字下划线和美元符 组成 不能以数字开头 标识符不能有空格 标识符严格区分大
  • 龙蜥(Anolis) 编译PHP-8.1.22提示No supported shared memory caching support was found when configuring opcac

    龙蜥 Anolis 编译PHP 8 1 22提示No supported shared memory caching support was found when configuring opcac 使用龙蜥 Anolis 编译安装php8
  • SpringBoot入门最详细教程

    网上有很多springboot的入门教程 自己也因为项目要使用springboot 所以利用业余时间自学了下springboot和springcloud 使用下来发现springboot还是挺简单的 体现了极简的编程风格 大部分通用都是通过
  • 如何用ChatGPT使开发效率提高50%以上?

    简介 ChatGPT是一个大型语言模型 由OpenAI开发 它被训练用于进行对话式交互 能够理解和生成自然语言文本 ChatGPT可以用于多种任务和场景 包括但不限于 智能助手 创意生成 语言学习 编程辅助等 ChatGPT的优势在于它的广
  • Eclipse汉化教程

    在看了很多博主的安装教程后 我不是很懂为什么要查找版本号 此处提供另一种方法 1 查看eclipse安装时间 若刚安装的 请直接看第二条 打开eclipse 在help里找到about 具体请看下图的图标和位置 打开后 找到buildid
  • Java多线程基础之创建和运行

    前言 在现代软件开发中 多线程编程已经成为一项重要的技能 通过合理地利用多线程 我们可以实现并发处理 提高程序性能和改善用户体验 本文将介绍Java中多线程编程的基础知识 包括多线程的概念 线程的创建和运行 以及线程的生命周期和状态转换 一
  • Linux(ubuntu)上安装vmware workstation虚拟机

    Linux ubuntu 上安装vmware workstation虚拟机 首先下载vmware workstation 官网下载地址 https www vmware com products workstation pro workst
  • Qt中的HTTP

    Qt中的HTTP HTTP概述 两种架构 基于请求响应的模式 无状态 请求报文 响应报文 请求方式 Qt实现HTTP请求 HTTP概述 HTTP是一种超文本传输协议 是一种用于分布式 协作式和超媒体信息系统的应用层协议 是浏览器端Web通信
  • GDB常用指令

    摘抄整合 勿喷 GDB r run 执行程序 n next 下一步 不进入函数 s step 下一步 会进入函数 b breakponit 设置断点 l list 查看源码 c continue 继续执行到下一断点 bt backtrace
  • Android AIDL使用详解

    1 什么是aidl aidl是 Android Interface definition language的缩写 一看就明白 它是一种android内部进程通信接口的描述语言 通过它我们可以定义进程间的通信接口 icp interproce
  • C++ Primer 第Ⅱ部分笔记

    1 向算法传递函数 1 1向排序算法传递二元谓词 定义isSHorter方法 bool isShorter const int i const int j return i
  • C++中deque的用法(超详细,入门必看)

    博主简介 Hello大家好呀 我是陈童学 一个与你一样正在慢慢前行的人 博主主页 陈童学哦 所属专栏 C STL 如果本文对你有所帮助的话 希望可以点赞 收藏 支持一下哦 期待你的关注 一起成长哟 前言 Hello各位小伙伴们好 欢迎来到本
  • Spring事务源码详解-spring原码(二)

    上篇文章介绍了事务开启 前面介绍了解析adviors spring事务源码详解 spring原码 一 https blog csdn net ke1ying article details 131360060 事务源码 先从缓存里获取 主要