Spring及Spring boot 第四章-第二节 Spring声明式事务管理 解析@Transactional

这个过程可以和@Aspect 实现的AOP来进行对比

SpringAop获取Advisor

啊啊

(1) 获取Advisor——BeanFactoryTransactionAttributeSourceAdvisor

@Transactional和@Aspect获取Advisor的不同之处在于它的Advisor一开始便是以Bean的形式存在,不需要通过解析@Aspect注解来将方法转化为Advisor

(2)判断Advisor是否应用于该Bean

在Spring声明式事务管理解析@Transactional注解的过程中会将它的信息转化为TransactionAttribute对象,

首先进行判断,BeanFactoryTransactionAttributeSourceAdvisor不是IntroductionAdvisor类型然后开始判断canApply,这是重点

IntroductionAdvisor的意义是实现AOP引入功能,和切点功能还不太一样。这里BeanFactoryTransactionAttributeSourceAdvisor当然是作为PointCutAdvisor
参考链接跟着小马哥学系列之 Spring AOP
在这里插入图片描述

在这里插入图片描述

AopUtils#canApply——非常重要的场景

它做了两件事

1. 判断这个目标类上有没有@Transactional注解,这样就可以知道事务相关的Advisor(BeanFactoryTransactionAttributeSourceAdvisor)能不能应用于该Bean,方便做之后的处理
2.  如果有,之后就进行真正的@Transactional注解解析,这里是非常重要的点(获取TransactionDefinition)
 public static boolean canApply(Pointcut pc, Class<?> targetClass, boolean hasIntroductions) {
   
        Assert.notNull(pc, "Pointcut must not be null");
        if (!pc.getClassFilter().matches(targetClass)) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值