本文主要分析与讲解seata中如何利用spring实现自定义注解
1.注解扫描
核心类:GlobalTransactionScanner
看一下GlobalTransactionScanner的结构:
GlobalTransactionScanner继承自抽象类AbstractAutoProxyCreator
AbstractAutoProxyCreator实现了接口SmartInstantiationAwareBeanPostProcessor
SmartInstantiationAwareBeanPostProcessor的顶级父接口是BeanPostProcessor
也就是说GlobalTransactionScanner实现了BeanPostProcessor
BeanPostProcessor是spring后置处理器的核心接口
回顾一下java的基础知识,bean的生命周期:
BeanPostProcessor接口的两个方法就是第6点与8点的具体实现。
看一下AbstractAutoProxyCreator关于后置处理器 的实现
后置处理器的前置方法的实现:
此类未做任何事。
后置处理器的后置方法的实现:
wrapIfNecessary判断了使用TCC模式还是其他模式的intecepter
此处的interceptor类型是MethodInterceptor
MethodInterceptor的核心就是对bean做一个aop的增强
看一下MethodInterceptor接口,核心处理方法invoke
我们跟进GlobalTransactionalInterceptor中的invoke方法看一下
此处对判断了seata中的是否使用了两个核心注解,如果使用,则使用MethodInvocation进行增强