1.主要接口介绍
在Spring中,与事务相关的类或接口有以下三个:
?TransactionDefinition
TransactionDefinition的作用是定义一个事务的属性,比如传播属性、隔离属性、超时属性等。
?TransactionStatus
TransactionStatus记录一个运行时的事务。
?PlatformTransactionManager
PlatformTransactionManager的作用是管理事务。它包含三个方法,如下图所示:
其中getTransaction方法的作用是:根据TransactionDefinition定义的事务属性,返回一个相应的事务TransactionStatus,它可能代表一个新的事务,或可能代表一个现有的事务,如果在当前调用堆栈存在一个符合条件的事务。
PlatformTransactionManager的继承关系如下:
PlatformTransactionManager只是一个接口,它的具体实现跟具体的资源有关。如果是数据库就用DataSourceTransactionManager,如果是JMS的消息队列,就用JmsTransactionManager,等等。
下面以DataSourceTransactionManager为例,介绍getTransaction方法的实现。
getTransaction的第一步是通过doGetTransaction()获得一个transaction对象。具体实现如下:
DataSourceTransactionObject的实现如下:
由此可见,在DataSourceTransactionManager中,其管理的transaction对象,实质是一个数据库连接connection。
getTransaction的第二步是判断当前的transaction是新事务还是已存在的事务,如果是已存在的事务,则调用handleExistingTransaction方法。如果是新事务,则根据TransactionDefinition中设置的值,根据事务的传播属性等信息进行相应处理。
2.事务管理的具体实现
Spring实现事务管理功能主要涉及的技术是AOP。如下图展示了事务管理的过程:
在执行用户的具体代码之前,创建事务;在执行完具体代码后,根据执行结果,进行鐧界櫆椋庡摢閲屾不鏈濂?鍖椾含鍝噷鍙互鑳芥不鐤楀ソ鐧界櫆椋?