spring-事务管理学习
Ok,spring的源码学习到了事务这块就大概要告一段落了,后续如果有机会的话,会开启spring-boot的学习。不过目前还是打算把下一段的学习计划放在其他事情上。先对事务这块做一个简要的学习笔记,后续的规划再说。
总体来说,Spring的事务管理的实现,是通过aop来实现的,其实也很好理解,对一个方法加上事务,也就意味着在方法执行之前,需要begin这个事务,在方法结束后,需要做commit操作,如果方法执行失败,就进行回滚操作。
这里主要说下声明式事务的部分,编程式的事务其实也差不多,所以就不提了。
首先是对声明的事务的一些属性进行存储,在spring里,有一个类来专门存储这些属性,就是TransactionAttributeSource ,这个类的创建在tx标签的handler是可以看到的。
后续对于@Transactional的解析和前面分析过的无数的注解的生效一毛一样,都是通过一个beanPostProcessor,然后在解析到希望的注解后,给这个对象生成代理对象返回,过程和aop的那套过程是一样的。
最关键的是在生成代理是使用到的advisor,在看tx标签的handler的时候,可以看到有俩个关键的类的注入,TransactionInterceptoer和BeanFactoryTransactionAttributeSourceAdvisor. 在BeanFactoryTransactionAttributeSourceAdvisor类里,可以看到pointCut对类进行匹配的操作。在TransactionInterceptoer里可以看到方法前后,加入的事务相关的一系列代码。具体的逻辑就不多说了,无非还是上面说的那样,在方法开始前begin,在方法后进行commit或者回滚。不过因为要考虑嵌套事务,还有不同数据源的一些差异性,逻辑稍微有点复杂,可以在需要的时候自己看下。
另外就是,每中数据源都有自己的transactionManager,里面具体实现了beigin,commit,roback的逻辑,但是貌似是不支持多数据源混合操作的情况的。
Ok,就简要的记录下。
spring-事务管理学习的更多相关文章
- spring事务管理学习
spring事务管理学习 spring的事务管理和mysql自己的事务之间的区别 参考很好介绍事务异常回滚的文章 MyBatis+Spring 事务管理 spring中的事务回滚例子 这篇文章讲解了@ ...
- 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)
一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...
- SSM(spring mvc+spring+mybatis)学习路径——1-2、spring事务管理
目录 1-2 Spring事务管理 概念介绍 事务回顾 事务的API介绍 Spring 事务管理 转账案例 编程式事务管理 声明式事务管理 使用XML配置声明式事务 基于tx/aop 使用注解配置声明 ...
- 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】
一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...
- Spring事务管理----------整合学习版
作者:学无先后 达者为先 Spring提供了一流的事务管理.在Spring中可以支持声明式事务和编程式事务. 一 spring简介 1 Spring的事务 事务管理在应用程序中起着至关重 ...
- 【转】Spring事务管理
原文链接 在 Spring 中,事务是通过 TransactionDefinition 接口来定义的.该接口包含与事务属性有关的方法.具体如清单 1 所示: 清单 1. TransactionDefi ...
- Spring 事务管理笔记
本文为 Spring 框架的事务管理学习笔记,官网文档地址为:Transaction Management,隔离级别及传播属性解释来自 org.springframework.transaction. ...
- (转)Spring事务管理详解
背景:之前一直在学习数据库中的相关事务,而忽略了spring中的事务配置,在阿里面试时候基本是惨败,这里做一个总结. 可能是最漂亮的Spring事务管理详解 https://github.com/Sn ...
- 转 可能是最漂亮的Spring事务管理
Snailclimb 2018年05月21日阅读 4246 可能是最漂亮的Spring事务管理详解 Java面试通关手册(Java学习指南):github.com/Snailclimb/… 微信阅读地 ...
- spring事务管理——编程式事务、声明式事务
本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本教程假定您已经掌握了 ...
随机推荐
- 9.26 H5日记
9.26 1.新的背景属性,background-position background-position有两个值,水平和垂直,单位px ❤在html和CSS当中,有三个属性可以向服务器发送请求,分别 ...
- 8N - 水果
夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了 ...
- Liunx clear
linux clear命令 清空终端屏幕命令,另外,按Ctrl+L也可以达到同样的效果. init 0 关闭Liunx init 4 安全模式 init 6 重启Liunx
- json与字符串转换
一.json转为字符串 JSON.stringify(...) 二.字符串转为json JSON.parse(...)
- linux中的设备类型
loop设备 loop设备 一.参考命令[root@localhost a]# losetup usage: losetup loop_device ...
- Next generation sequencing (NGS)二代测序数据预处理与分析
二代测序原理: 1.DNA待测文库构建. 超声波把DNA打断成小片段,一般200--500bp,两端加上不同的接头2.Flowcell.一个flowcell,8个channel,很多接头3.桥式PCR ...
- Python之路(第十三篇)time模块、random模块、string模块、验证码练习
一.time模块 三种时间表示 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.(从 ...
- ceres入门学习
转载自https://www.jianshu.com/p/e5b03cf22c80 Ceres solver 是谷歌开发的一款用于非线性优化的库,在谷歌的开源激光雷达slam项目cartographe ...
- mybatis3.2初学感悟
新手,学了mybatis框架一周,写点感悟下来. mybatis,是操作数据库,持久层的一个框架,它是对JDBC的封装.看到了这个框架,我突然感受到封装与抽象的力量.也明白了些为什么要分层的原因. 记 ...
- activiti 清库脚本(转)
在使用activiti 的时候会经常遇到需要清空数据库中的数据,因此本文重点讲解如何解决该问题. 再删除数据的时候,需要注意有主外键约束的问题?下面罗列的DDL可以结合自身的业务需求进行灵活改造. D ...