spring事务源码详解-spring原码(一)

news2025/2/26 10:03:17


前面说过了aop源码,这里再稍微回顾一下

 

我们会用注解@EnableAspectJautoProxy开启aop

当我们用了proxytargetClass会强制cglib动态代理

源码里有@Import

里面会注册AnnotionAwareAspectJAutoProxyCreator

后面会在beanDefinationMap获取到所有定义的Objects循环

如果有@Aspect则注册advisor

之后在初始化的后置处理器里作比较这些advisors。

  • 事务源码

Aop有加载切面通过注解加载,创建代理在createBean方法里,调用代理用自己定义的@before和@after等注解。

事务也有这三步,但是调用代理是系统定义好的,而不是开发人员自行定义。

ACID四大特性

A原子性:要么全部成功,要么全部失败

C一致性:事务的前后数据必须保证一致

I隔离性:事务之间保证互不干扰

D持久性:数据持久化

事务的传播行为

指事务的嵌套,当事务里面再嵌套一个事务,就有多个策略。

默认是required,开启新事务,融合到外部事物当中。

SUPPORTS,不开启新事务,融合到外部事务当中。

REQUIRES_NEW,开启新事务,挂起外部事务,创建新事务。

NOT_SUPPORTS,不开启新事物,挂起外部事务。

NEVER,不开启事务,抛出异常。

MANDATORY,抛出异常,融合到外部事务。

NESTED,开启新事务,融合到外部事务,外层影响内层,内层不影响外层。

(必须到另一个类调用,传播性才会生效)

 

用@EnableTransactionManagement,它是基于aop,但是不开启aop也可以

事务是基于importSelector

impotSelector返回的是一个字符串数组

默认用的都是PROXY,除非在注解上注定ASPECTJ

PROXY则是采用动态代理实现事务

 

AutoProxyRegister里有一个registerBeanDefinitions是哪里调用的呢

在invokeBeanFactoryPostProcessors里调用的,注册bean定义

如果拿到的mode是proxy

则注册一个InfrastructureAdvisorAutoProxyCreateor

 

 

Aop和事务都会调用这个方法

会根据auto_proxy_creator_bean_name判断是否已经存在了

如果下面没有,则会创建一个RootBeanDefinition,注册到bean定义中去

Int是索引判断,事务的索引和aop的索引,会优先aop的定义覆盖之前的。

走完全面的invokeBeanFactoryPostProcessors

则开始走实例化finishBeanFactoryInitialization方法

 

这里拿到我们所有bean的后置处理器

其中AnnotationAwareAspectAutoProxyCreator,这就是aop的bean后置处理器

 

这里的事务advice是内置设置的,和aop不同,aop的是自己定义

setTransactionAttributeSource是解析我们注解

这里会指定导入的配置类一个角色,用@Role指定,但这里会被后面的aop给覆盖,就是前面说的覆盖代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2020新基建决赛-crypto-onepiece

onepiece 一、概要 1、标题:onepiece 2、关键字:e2,rabin,凯撒 3、比赛:2020新基建决赛 4、工具:python,米斯特工具 二、开始 1、题目分析 题目给了一个pubkey.pem和onepiece.enc&#xff…

C++右值引用 移动语义 完美转发 引用叠加

右值引用 MyString浅拷贝与深拷贝浅赋值与深赋值 左值与右值左值概念左值右值与函数的结合移动构造函数移动赋值函数移动构造和移动赋值的应用 移动语义 有点问题完美转发引用叠加 MyString 浅拷贝与深拷贝 s1先在堆区申请了空间,然后将p指针指向的字符串复制到该…

设计模式之责任链模式笔记

设计模式之责任链模式笔记 说明Chain of Responsibility(责任链)目录责任链模式示例类图请假条类抽象处理者类小组长类部门经理类总经理类测试类 说明 记录下学习设计模式-责任链模式的写法。JDK使用版本为1.8版本。 Chain of Responsibility(责任链) 意图:使多个对象都有机…

Vue搜索组件,显示热门、近期搜索(结合element ui)

🚀 注重版权,转载请注明原作者和原文链接 🥭 作者:全栈小袁 🍎 原创个人开源博客项目(目前V3.0版本):https://github.com/yuanprogrammer/xiaoyuanboke 🍉 开源项目觉得还行的话点点star&#x…

【P4】Windows 下搭建 DVWA 及命令注入漏洞详解

文章目录 一、Windows 下搭建 DVWA1.1、DVWA 靶场搭建1.2、六步快速搭建 DVWA1.2.1、下载并安装 PHPstudy:http://public.xp.cn/upgrades/PhpStudy2018.zip1.2.2、将解压后的 DVWA 原代码放置 phpstudy 安装目录的 WWW文件夹1.2.3、进入 DVWA/config 目录&#xff0…

2022前端趋势报告(下)

前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~ 主页: oliver尹的主页 格言: 跌倒了爬起来就好~ 一、前言 本文内容来自于《St…

springBoot学习——spring+springMVC 集成mybatis 拦截器

目录 引出入门案例:登陆和注册 & 用户信息分页 之 固定的步骤:(1)建普通项目配置pom.xml文件(2)写主启动类 application.yml文件【bug】pom.xml文件导了mybatis的包,但是application.yml文…

Drag Your GAN论文解读,基于点的交互式操作拖动到生成图像[DragGAN]

只需要鼠标的点击就可以自动修图的产品,火爆问世,可以说是超越PS,神一般的存在了,而且没有门槛,对于普通大众来说直接可以上手使用,这个是PS完全不具备的。更关键的是,这款产品跟PS明显区别在于…

如何系统地自学 Python?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言为什么选择Python作…

【Intel 黑客松大赛】基于YOLO的杂草-农作物检测分类系统

目录 一、赛题简介:计算机视觉挑战——检测并清除杂草二、基于YOLO的杂草-农作物检测分类2.1、YOLO简介2.2、基于YOLO的杂草-农作物检测分类解决方案 三、基于YOLO的杂草-农作物检测分类系统设计3.1、基于flask框架的demo应用程序后端3.2、基于Vue框架的demo应用程序…

Qt6.2教程——4.QT常用控件QPushButton

一,QPushButton简介 QPushButton是Qt框架中的一种基本控件,它是用户界面中最常见和最常用的控件之一。QPushButton提供了一个可点击的按钮,用户可以通过点击按钮来触发特定的应用程序操作。比如,你可能会在一个对话框中看到"…

Unity编辑器扩展-第七集-应用键/显示提示词

第六集链接:Unity编辑器扩展-第六集-创建窗口/批量填图_菌菌巧乐兹的博客-CSDN博客 一、本节目标效果展示 1.我们有时候需要多次使用编辑窗口,但是每次一点执行,就关掉了,就很烦,所以我们希望,点击按钮&…

Spring Bean的实例化过程

一、前言 对于写Java的程序员来说,Spring已经成为了目前最流行的第三方开源框架之一,在我们充分享受Spring IOC容器带来的红利的同时,我们也应该考虑一下Spring这个大工厂是如何将一个个的Bean生产出来的,本期我们就一起来讨论一…

2023年6月GESP能力等级认证Python一级真题

2023-06 GESP等级考Python一级真题 题数:27 分数:100 测试时长:90min 一、单选题(每题 2 分,共 30 分) 1. 以下不属于计算机输出设备的有( A)。(2分) A…

几个Arcpy代码应用案例

1 案例一 删除特定记录 使用 arcpy 从 ArcGIS 中的图层中删除特定记录。可以使用更新游标(UpdateSursor)和 SQL 查询来识别和删除所需的记录。以下是如何删除特定图层记录的示例 import arcpy selectedParcelsselectedParcels expres…

分子碰撞频率和自由程------从一个物理小问题解剖自己的数学思维

物理学12-8节中,关于分子平均碰撞的解说如下: (一)分子碰撞自由程公式 第一个公式中,lamda v / z中,v的单位是m/s, z的单位是A/s, 其中A是常数。那么lamda描述的结果是m/A, 这正是长度单位。 此公式lamda…

利用正弦定理证明两角和差公式

首先用正弦定理,证明sin(AB)sinAcosBcosAsinB。 另外,其它的两角和差公式,都可以用三角函数奇偶性、诱导公式等推导出来,无需再用正弦定理证明一遍。

耗时一个月!手撸博客系统,主打美观实用!

先附上博客链接RoCBlog 关于博客 关于博客 RoCBlog 完成耗时:20天 起初是想搭建自己的博客,看了网上许多开源框架,感觉没啥意思,于是决定自己写一套 纯手撸VueSpringboot 其实是个我一边学vue一边写出来的东西,前期…

团体程序设计天梯赛-练习集L1篇⑩

🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:陈童学哦CSDN 💡所属专栏:PTA 🎁希望各…

(贪心) 1221. 分割平衡字符串 ——【Leetcode每日一题】

❓ 1221. 分割平衡字符串 难度:简单 平衡字符串 中,L 和 R 字符的数量是相同的。 给你一个平衡字符串 s,请你将它分割成尽可能多的子字符串,并满足: 每个子字符串都是平衡字符串。 返回可以通过分割得到的平衡字符…