开始记录seata的源码学习笔记,这篇博客主要先记录源码的入门,简单先看下,源码要从哪里入手
对于seata,是用来处理分布式事务的框架,其实简单来说,就是一个Java应用,我们在使用的时候,需要先启动seata的服务端代码,本质上就是一个main方法,这篇博客,先不看这个逻辑,我们先看下在业务代码中,使用了seata之后,在业务应用启动后,接口被调用时,seata是如何作用于方法调用过程的
seata入口
在业务应用中,使用seata,比较简单,需要引入seata相关的jar包,然后在需要使用分布式事务的service方法 加上 @GlobalTransactional(name = “create-order”,rollbackFor = Exception.class)注解即可
那当业务应用在启动的时候,seata是如何生效的?
在引入seata的jar包之后,会自动注入一个bean
com.alibaba.cloud.seata.GlobalTransactionAutoConfiguration
这个bean就是相对比较核心的一个bean
GlobalTransactionAutoConfiguration
这个类,是通过springboot的自动注入,引入的,在这个bean中,通过@Bean的形式,注入了另外一个bean:GlobalTransactionScanner
通过下面这个图,我们可以发现,这个bean:GlobalTransactionScanner,间接的实现了后置处理器的接口,同时,继承了AbstractAutoProxyCreatore,AbstractAutoProxyCreatore 这个bean,其实就是spring中,处理切面和事务时,用来生成动态代理对象的后置处理器,在这个bean的postProcessAfterInitialization方法中,完成了对代理对象的生成
而GlobalTransactionScanner类,覆写了postProcessAfterInitialization这个方法中调用的wrapIfNecessary()方法
在覆写的wrapIfNecessary()方法中,完成了对分布式事务中,service需要生成动态代理对象的处理