Spring事务原理一(如何织入AOP)

本文深入探讨了Spring事务管理的实现原理,从@EnableTransactionManagement注解开始,详细解析了如何通过AOP代理实现事务增强。重点介绍了TransactionManagementConfigurationSelector、ProxyTransactionManagementConfiguration类,以及BeanFactoryTransactionAttributeSourceAdvisor的创建过程。事务拦截器TransactionInterceptor和切点pointcut在事务处理中的作用也被详细阐述,最后解释了如何通过findAdvisorsThatCanApply()方法找到匹配的事务Advisor。
摘要由CSDN通过智能技术生成

直入主题
我们想要了解spring的事务原理,首先从注解EnableTransactionManagement入手:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
// 这是重点这是重点这是重点这是重点********
@Import(TransactionManagementConfigurationSelector.class)
public @interface EnableTransactionManagement {
// 这个就决定了是用JDK代理还是CGLIB代理
// false就是使用JDK代理,针对接口代理
// true就是直接针对实现类代理
boolean proxyTargetClass() default false;

AdviceMode mode() default AdviceMode.PROXY;


int order() default Ordered.LOWEST_PRECEDENCE;

}
public class TransactionManagementConfigurationSelector extends AdviceModeImportSelector {
// 默认是PROXY,所以直接看ProxyTransactionManagementConfiguration这个类
@Override
protected String[] selectImports(AdviceMode adviceMode) {
switch (adviceMode) {
case PROXY:
return new String[] {AutoProxyRegistrar.class.getName(),
ProxyTransactionManagementConfiguration.class.getName()};
case ASPECTJ:
return new String[] {determineTransactionAspectClass()};
default:
return null;
}
}

private String determineTransactionAspectClass() {
    return (ClassUtils.isPresent("javax.transaction.Transactional", getClass().getClassLoader()) ?
            TransactionManagementConfigUtils.JTA_TRANSACTION_ASPECT_CONFIGURATION_CLASS_NAME :
            TransactionManagementConfigUtils.TRANSACTION_ASPECT_CONFIGURATION_CLASS_NAME);
}

}
ProxyTransactionManagementConfiguration

@Configuration(proxyBeanMethods = false)
@Role(BeanDefinition.ROLE_INFRAS

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值