这几天把Spring的事务处理源码分析了一下,基本上了解了其实现方式。在这里做个简单的小结。
先概括一下流程:(只分析声明式事务)
首先通过解析spring的xml配置文件,让spring支持事务注解,并将事务增强器放入IOC容器中。
在bean实例化之前,调用后处理程序,获取到当前类的所有增强器,通过代理获取目标类。

强化的过程都体现在TransactionInterceptor的invoke方法中:
开启事务、回滚事务、提交事务,这些逻辑流程的实现都在事务管理器中实现。

因为我是使用的DatasourceTransactionManager事务管理器,所以上面的三个操作,最终都委托它实现。
当然逻辑上的功能都在它的父类AbstractPlatformTransactionManager中实现,最终是实现于PlatformTranManager接口。

具体的提交、回滚等操作,都交由数据源处理。

在分析spring管理事务的时候,也好好看了看spring的7种事务传播行为,虽然很多,很复杂,但是从源码中看起来还挺清晰的。

之后有时间会分析一下JDBC的具体实现逻辑。

tencent.jpg