Spring aop和事务源码连接口

在纯spring 框架中,想要使用事务,注解方式是在加载类加上注解
@EnableTransactionManagement,里面有个@Import,里面会帮我们注册一个类:BeanFactoryTransactionAttributeSourceAdvisor

所以进到aop 创建代理对象有这个代码

在这里插入图片描述
下面是代理的创建,在创建代理肯定要先找到这个代理要走哪些拦截器
所以进入这个方法,得到的是前面缓存好的
BeanFactoryTransactionAttributeSourceAdvisor在这里插入图片描述

拿到之后后续会调用canApply 方法进行判断当前的Advisor是否能够应用,而对于事务来讲是这样的好,他会走canApply 然后走匹配器MethodMatcher,然后进到TransactionAttributeSourcePointcut,然后再到如下:
在这里插入图片描述
如果当前方法没有加@Transactional,那么返回null,那么回到创建代理,就不会有TransactionInterceptor 这个东西了,所以在真正代理方法调用也不会走TransactionInterceptor 的invoke 方法了

谈谈为什么是invoke

因为在spring aop 体系中,spring靠的是MethodInceptor 来做拦截,
而MethodInceptor 也实现了Advice 也是aop 的一个设计

cglib 如何走代理

在cglib 代理的类,会走callback[0],而它就是org.springframework.aop.framework.CglibAopProxy.DynamicAdvisedInterceptor#intercept
所以这里会去执行aop 的东西,包括事务TransactionInterceptor

BeanFactoryTransactionAttributeSourceAdvisor和TransactionInterceptor 关系
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇见更优秀的自己

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值