spring源码之事务上篇

前言

本篇之前,已经写过关于AOP的源码分析,在此基础上来阅读事务的源码是比较清晰的。另外,需要对数据库有一定的了解,我们所说是事务一般指的都是狭义的事务,即数据库事务。文中没有特别指出的数据库,均指的是mysql,后面再来写一篇关于mysql的锁和事务的文章。

概述

事务指的是一个程序执行单元,这个执行单元要么成功,要么失败,绝对不允许存在中间状态,它是我们恢复和并发控制的基本单位。

学习事务时,一般会拿转钱来做说明,这里也拿张三向李四转100元来说明,这个过程分为两步,张三帐户减100,李四帐户加100.

事务的四个特性(ACID)

  • 原子性:事务由一系列操作来完成,要么保证这一系列操作同时起作用,要到全部不起作用。以例子来说,张三减100,李四加100。要同时成功或失败,不然就不满足原子性。
  • 一致性:从一个数据库状态转变到别一个状态。一致性和原子性,经常会让人认为是一个东西,个人理解一致性是从状态变化的角度来看问题,即结果,而原子性更偏向于过程来看问题。以例子来说,这里的状态就是转帐前后,张三和李四总的资金数没有发生变化。可以说原子性保证了一致性。
  • 隔离性:并发执行的事务是相互隔离的。以例子来说,假设张三帐户有1000元,他同时向王五也转帐100,转给李四时,他的户头上扣了100,就只有900了,转给王五是,再扣100,只有800了,如果李四收钱时出了问题,而王五收钱成功,这时把800写入到数据库。张三就会很生气,因为帐户被多扣了100。这个就是有问题的。
  • 持久性:事务完成,不论发生什么,都不会对操作有影响。

知识点

学习spring事务时,我们一般会从事务特性、隔离级别、传播行为三个进行分析

  • 事务的四个特性

  学习事务时,一般会拿转钱来做说明,这里也拿张三向李四转100元来说明,这个过程分为两步,张三帐户减100,李四帐户加100.

  事务的四个特性(ACID)

    • 原子性:事务由一系列操作来完成,要么保证这一系列操作同时起作用,要到全部不起作用。以例子来说,张三减100,李四加100。要同时成功或失败,不然就不满足原子性。
    • 一致性:从一个数据库状态转变到别一个状态。一致性和原子性,经常会让人认为是一个东西,个人理解一致性是从状态变化的角度来看问题,即结果,而原子性更偏向于过程来看问题。以例子来说,这里的状态就是转帐前后,张三和李四总的资金数没有发生变化。可以说原子性保证了一致性。
    • 隔离性:并发执行的事务是相互隔离的。以例子来说,假设张三帐户有1000元,他同时向王五也转帐100,转给李四时,他的户头上扣了100,就只有900了,转给王五是,再扣100,只有800了,如果李四收钱时出了问题,而王五收钱成功,这时把800写入到数据库。张三就会很生气,因为帐户被多扣了100。这个就是有问题的。
    • 持久性:事务完成,不论发生什么,都不会对操作有影响。
  • mysql数据库的隔离级别 

  分为以下四个级别,每个级别都是来解决特点问题的

    • READ UNCOMMITTED

总结

整个AOP的分析就到此结束,接下来对事务这块的源码做一些分析

参考链接

  • https://wenku.baidu.com/view/6ce3121da300a6c30c229f89.html(核心关注点与横切关注点)
  • https://www.cnblogs.com/syf/archive/2012/05/09/2491780.html(OOP与AOP)
  • https://blog.csdn.net/garfielder007/article/details/78057107(连接点用地概念)
  • https://docs.spring.io/spring/docs/4.3.18.RELEASE/spring-framework-reference(spring官方文档)
  • http://www.cnblogs.com/xrq730/p/6753160.html((源码分析的参考文章)
  • https://blog.csdn.net/elim168/article/details/78166296(@DeclareParents使用)

原文地址:https://www.cnblogs.com/lucas2/p/9319917.html

时间: 2024-11-13 09:31:28

spring源码之事务上篇的相关文章

Spring源码阅读:Spring事务管理的基础

上一节了解了全局事务与局部事务以及Spring提供的两种事务模式:编程式事务与声明式事务. 不论是编程式的事务处理,还是声明式的事务处理.他们都要对局部事务和全局事务以支持,也就是说要对JDBC进行支持.ORM框架,同时也要对JTA进行支持.他们的公共部分是commit,rollback.通过这一节的了解,我相信以后配置Spring事务时,就不需要在去网上查资料了或者去查Spring的参考文档了. 因此,Spring设计了如下的事务管理框架: 从上面的类图中和容易可以看出分为三部分:Platfo

spring源码(3)之解析配置文件的过程

spring源码之解析配置文件过程 上篇博文,我们探讨了spring获取配置文件applicationContext.xml的document对象.回想struct2解析struct*.xml,当struct2获取struct*.xml文件的document对象之后,就会循环遍历这个document,然把不同的标签的信息封装到不同的对象中,如<package>标签封装到packageConfig对象,<action>标签封装到actionConfig对象等等.那么spring在获取

Spring源码分析专题——目录

Spring源码分析专题 -- 阅读指引 IOC容器 Spring源码分析专题 -- IOC容器启动过程(上篇) Spring源码分析专题 -- IOC容器启动过程(中篇) Spring源码分析专题 -- IOC容器启动过程(下篇) Spring源码分析专题 -- IOC容器依赖注入 SpringMVC Spring源码分析专题 -- SpringMVC IOC容器依赖注入 Spring源码分析专题 -- SpringMVC原理分析 Spring源码分析专题 -- SpringAOP源码分析 S

Spring源码分析专题 —— 阅读指引

阅读源码的意义 更深入理解框架原理,印象更深刻 学习优秀的编程风格.编程技巧.设计思想 解决实际问题,如修复框架中的bug,或是参考框架源码,结合实际业务需求编写一个独有的框架 阅读源码的方法 首先是要有一定的编程经验.如果连业务代码都写得不流畅那是不建议阅读源码的,因为基础不好的情况下一是阅读困难,二是无法静下心理解,每看两行就会纠结花大量时间在源码上是否值得,感觉不如写多两行业务代码来得有价值. 要有耐心.一篇关于源码的文章可能需要阅读两三小时以上才能读完,如果没有这个觉悟,可能看到一半就转

将Spring源码转换为工程 + 导入Eclipse时缺失jar包

将源码转换为工程: 比如查看Spring事务部分的源码. 打开cmd窗口,切换到Spring-tx文件夹下,执行命令 "gradle cleanidea eclipse" . 缺失jar包: 第一步:切换到spring源码的lib目录 第二步:解压lib目录下的spring-core-4.2.6.RELEASE.jar文件 第三步:在cmd窗口下切换到第二步中解压的spring-core-4.2.6.RELEASE目录 第四步:使用jar命令生成需要的jar文件 (jar cvf sp

【Spring源码分析】非懒加载的Bean实例化过程(下篇)

doCreateBean方法 上文[Spring源码分析]非懒加载的Bean实例化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下AbstractAutowireCapableBeanFactory的doCreateBean方法代码: 1 protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[]

spring源码解析——spring源码导入eclipse

一.前言     众所周知,spring的强大之处.几乎所有的企业级开发中,都使用了spring了.在日常的开发中,我们是否只知道spring的配置,以及简单的使用场景.对其实现的代码没有进行深入的了解.开卷有益,在我们空闲的时间里面阅读一下spring的源码,对提升我们的自身能力还是还有很大的帮忙.下面总结一下spring源码导入eclipse的具体的操作. 二.spring的特点 spring的的核心就是IOC(控制反转)和AOP(基于切面的编程) 事务管理方面采用了:声明式事务 为各种主流

Spring源码分析——BeanFactory体系之抽象类、类分析(二)

上一篇分析了BeanFactory体系的2个类,SimpleAliasRegistry和DefaultSingletonBeanRegistry——Spring源码分析——BeanFactory体系之抽象类.类分析(一),今天继续分析. 一.工厂Bean注册支持——FactoryBeanRegistrySupport 废话不多说,直接看我注释的源码: /* * Copyright 2002-2012 the original author or authors. * * Licensed und

Spring源码分析——BeanFactory体系之抽象类、类分析(一)

上一篇介绍了BeanFactory体系的所有接口——Spring源码分析——BeanFactory体系之接口详细分析,本篇就接着介绍BeanFactory体系的抽象类和接口. 一.BeanFactory的基本类体系结构(类为主): 上图可与 Spring源码分析——BeanFactory体系之接口详细分析 的图结合分析,一个以接口为主,一个以类为主(PS:Spring的体系结构要分析清楚,不得不曲线救国啊!不然27寸屏幕给我画估计都装不下.). 具体: 1.7层的类体系继承. 2.Abstrac