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

【Spring事务的实现原理】

Spring事务的实现原理就是通过拦截@Transactional注解标识的方法,使用事务增强器对这些方法进行事务管理。其中关键的是事务管理器和事务属性源的配置和使用。Spring事务的实现原理可以简单理解为以下几个步骤:

  1. 从配置文件中获取PlatformTransactionManager,这个事务管理器是管理事务的关键。

  2. 创建TransactionAttributeSource,用来获取方法上定义的事务属性,如事务传播特性、事务隔离级别等。

  3. 创建TransactionAdvisor,这个切面用来指定事务增强器的增强器和切入点,从而实现对@Transactional注解的拦截和增强。

  4. 启用事务注解,通过tx:annotation-driven/标签启用事务注解,并指定事务管理器和事务属性源。这样就可以在代码中使用@Transactional注解来管理事务了。

1.从配置文件中获取PlatformTransactionManager

在配置文件中,我们可以使用tx:annotation-driven/标签来启用事务注解,这样就可以在代码中使用@Transactional注解来管理事务了。这个标签会自动为我们创建一个TransactionInterceptor,这个拦截器负责拦截@Transactional注解标识的方法,并对这些方法进行事务管理。

在TransactionInterceptor中,我们需要注入PlatformTransactionManager,这个事务管理器是事务实现的关键。在TransactionInterceptor中,会有一个initPlatformTransactionManager()方法,这个方法用来从配置文件中获取PlatformTransactionManager。通常我们会将DataSourceTransactionManager配置为默认的事务管理器,这个管理器可以管理单个数据源的事务。

创建TransactionAttributeSource

在Spring中,事务增强器负责事务的具体管理和控制,其中核心的实现是TransactionAttributeSource接口和TransactionInterceptor类。TransactionAttributeSource接口用来获取方法上定义的事务属性,而TransactionInterceptor则负责事务属性的解析和管理。

在TransactionInterceptor中,我们需要注入TransactionAttributeSource,这个事务属性源用来获取方法上定义的事务属性,如事务传播特性、事务隔离级别等。

在TransactionAttributeSource中,我们需要实现getTransactionAttribute方法,这个方法负责获取指定方法上的事务属性。通常我们会使用AnnotationTransactionAttributeSource来实现这个接口。

创建TransactionAdvisor

在Spring中,我们需要创建一个TransactionAdvisor,这个切面用来指定事务增强器的增强器和切入点。TransactionAdvisor会在Spring的AOP框架中注册,从而实现对@Transactional注解的拦截和增强。

在TransactionAdvisor中,我们需要注入TransactionInterceptor和Pointcut,这个切点用来指定需要拦截的方法。

启用事务注解

在Spring中,我们可以通过tx:annotation-driven/标签来启用事务注解。这个标签会为我们创建一个TransactionInterceptor,并自动配置TransactionAdvisor,从而实现了事务注解的管理和控制。同时,也需要注意在配置文件中指定事务管理器和事务属性源。

相关文章:

【Spring事务的实现原理】

Spring事务的实现原理就是通过拦截Transactional注解标识的方法,使用事务增强器对这些方法进行事务管理。其中关键的是事务管理器和事务属性源的配置和使用。Spring事务的实现原理可以简单理解为以下几个步骤: 从配置文件中获取PlatformTransactionManag…...

摆动输入连杆夹持机构

1、运动与受力分析 import sympy as sy import numpy as np import matplotlib.pyplot as plt a,a1,b,b1,c,c1,d2,d3,fi,F,L,e sy.symbols(a,a1,b,b1,c,c1,d2,d3,fi,F,L,e)A(-d2,0) D(0,d3) B(-d2a*cos(fi),a*sin(fi)) C(-c*cos(pu),d3c*sin(pu)) B(-d2a*cos(fipi),a*sin(fipi…...

C++——类与对象(下篇)

前言 前面已经介绍了类与对象(上),类与对象(中)的两篇文章,下面是类与对象的最后一些重要知识点的介绍和总结。 目录 再谈构造函数Static成员友元内部类匿名对象拷贝对象时的一些编译器优化再次理解封装…...

stm32 freeRTOS lwip TCP快速发送,内存泄露问题

现象1: 发送缓慢,tcp_write之后要等200多ms才能过发送出去,而且粘包严重。 解决办法 tcp_write之后,立马调用tcp_output ,tcp就会立马发送。 tcp_write tcp_output 现象2: 持续快速发送和接受TCP数据出…...

Ei、Scopus双检索 | 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024)

会议简介 Brief Introduction 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024) 会议时间:2024年4月26日-28日 召开地点:中国宜昌 大会官网:www.faiml.org FAIML 2024将围绕“人工智能与机器学习”的最新研究领域而展开,为…...

win10环境下搭建QT+opencv

安装步骤 源码编译安装免编译/cmake安装vs2022环境安装 问题解决 modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1 PS D:\Qt\Tools\mingw730_64\bin> D:\Qt\Tools\mingw730_64\bin\windres.exe D:\Opencv\opencv\opencv\build\modules\core\vs_ver…...

React16、18 使用 Redux

Redux 核心 Redux 介绍 Redux 是javaScript 状态容器,提供可预测化的状态管理 Redux 工作流程 Actions:对象,描述对状态进行怎样的操作 Reducer:函数,操作状态并返回新的状态 Store:存储状态的容器&am…...

【Python】Python运算符/部分函数对应的双下划线魔法方法

先说下Python版本:【Python 3.7.8】 以下用图片表格展示,一是防扒,二是没精力改成md格式。 还有就是内容肯定没有完全包含(而且也很难做到),像是__reduce__与py自带模块pickle有关(pickle用于对象序列化/反序列化)、sys.getsizeo…...

Macs Fan Control 1.5.16 Pro for mac风扇调节软件

Macs Fan Control是一款专门为 Mac 用户设计的软件,它可以帮助用户控制和监控 Mac 设备的风扇速度和温度。这款软件允许用户手动调整风扇速度,以提高设备的散热效果,减少过热造成的风险。 Macs Fan Control 可以在菜单栏上显示当前系统温度和…...

某技术公司技术二面面试题总结

存在一个单体架构的服务,怎么拆分为微服务的架构 将一个单体应用程序拆分成微服务架构是一个复杂的过程,需要深入的计划和实施。以下是一般的步骤和策略,可以帮助您成功地将单体应用程序拆分为微服务: 理解单体应用程序&#xff…...

初试小程序轮播组件

文章目录 一、轮播组件(一)swiper组件1、功能描述2、属性说明 (二)swiper-item组件1、功能描述2、属性说明 二、案例演示(一)运行效果(二)实现步骤1、创建小程序项目2、准备图片素材…...

Centos7 Yum安装PHP7.2

1、安装源 安装php72w,是需要配置额外的yum源地址的,否则会报错不能找到相关软件包。 php高版本的yum源地址,有两部分,其中一部分是epel-release,另外一部分来自webtatic。如果跳过epel-release的话,安装…...

2020年09月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程(1~8级)全部真题・点这里 第1题:铺砖 对于一个2行N列的走道。现在用12,22的砖去铺满。问有多少种不同的方式。 时间限制:3000 内存限制:131072 输入 整个测试有多组数据,请做到文件底结束。每行给出…...

30天入门Python(基础篇)——第2天:Python安装(保姆级)与IDE的认识与选择+详细安装教程

文章目录 专栏导读上一节课回顾1、Python解释器的安装查看各个版本的Python解释器①、ok,双击安装②、这里我们选择【自定义】安装, 下面的【将Python添加在环境变量】大家一定要打个勾③、点击【Next】进行下一步④、这里不建议安装在C盘, 点击【Browse】我在F盘创…...

软件测试/测试开发丨ChatGPT:带你进入智能对话的新时代

简介 人工智能时代来临 我们正处于AI的iPhone时刻。——黄仁勋(英伟达CEO) ChatGPT 好得有点可怕了,我们距离危险的强人工智能不远了。——马斯克(Tesla/SpaceX/Twitter CEO) 以上的内容说明我们现在正处于一个技术大…...

logback/log4j基本配置和标签详解

什么是logback logback 继承自 log4j,它建立在有十年工业经验的日志系统之上。它比其它所有的日志系统更快并且更小,包含了许多独特并且有用的特性。 logback.xml 首先直接上配置,我在项目过程中发现一些同时遇到需要logback文件的时候就去…...

雅思 《九分达人》阅读练习(二)

目录 雅思阅读练习 《九分达人》test3 paragraph3 1.单词含义要记准确,敏感度要上来。 2.找准定位,之后理解句子大致含义。 说说关于判断题的做题方法 关于“承认”有哪些单词 同替词汇 think 可以用什么其他单词来替换 单词 一些疑问 I have…...

[论文笔记] Gunrock: A High-Performance Graph Processing Library on the GPU

Gunrock: A High-Performance Graph Processing Library on the GPU Gunrock: GPU 上的高性能图处理库 [Paper] [Code] PPoPP’16 摘要 Gunrock, 针对 GPU 的高层次批量同步图处理系统. 采用了一种新方法抽象 GPU 图分析: 实现了以数据为中心(data-centric)的抽象, 以在结点…...

A Guide to PriorityQueue

原文链接:https://blog.csdn.net/ohwang/article/details/116934308 PriorityQueue 又叫 优先队列 注意1: PriorityQueue是用数组实现,数组大小可以动态增加,容量无限。 优先队列采用的是堆排序(默认为最小堆&#xff…...

Jenkins教程—构建多分支流水线项目

本教程向你展示如何使用Jenkins协调一个用 Node Package Manager (npm) 管理的简单 Node.js 和 React 项目, 并同时 为开发和产品环境交付不同的结果。 在开始本教程之前,建议你前往 教程概览 页面,并至少完成一个 介绍教程, 从而…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

WebRTC调研

WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...