通过AOP创建代理,设置回调,在执行目标方法时进行拦截,遍历回调接口,其中DynamicAdvisedInterceptor作为AOP实现的主要回调接口,跳转到它的intercept方法,开始AOP的advisor处理



熟悉这个AOP步骤就会知道其实就是遍历MethodIntecpter然后进行invoke

而处理声明式事务专属的Advisor——BeanFactoryTransactionAttributeSourceAdvisor它的Advise也就是TransactionInterceptor会在这里发挥作用,成为事务处理的主要场景入口。

在之前讲到事务功能实现组件讲到三个组件,TransactionDefinition、TransactionManager和TransactionStatus。在之前获取Advisor解析@Transctional时引入了第一个组件TransactionDefinition(TransactionAttribute)。这个方法就开始了后两个组件的创建和实现。
1. 拿到TransactionDefinition(TransactionAttribute)
2. 根据TransactionDefinition创建TransactionManager
3. 根据TransactionManager创建TransactionInfo(内部封装TransactionStatus),Spring声明式事务的实现已经很明了了,而这一步的实现是最关键的一步,也是真正意义上的Spring事务处理开始

首先对TransactionDefinition进行判断,也就是拿到我们定义的@Transactional信息进行分析
然后根据TransactionDefinition创建TransactionStatus。之后开启事务,这算是进入了事务的控制状态,也就是我们需要的方法执行有了事务的控制。