美文网首页
声明式事务

声明式事务

作者: 小青多多 | 来源:发表于2022-08-25 14:20 被阅读0次

一、环境搭建

  • 1)导入相关依赖
    数据源、数据库驱动、spring-jdbc模块
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java 数据源 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.44</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 数据库驱动 -->
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc spring-jdbc模块 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.12.RELEASE</version>
    </dependency>
  • 2)配置数据源、JdbcTemplate(Spring提供的简化数据库操作的工具)操作数据
  • 3)给方法上标注 @Transactional 表示当前方法是一个事务方法;
  • 4) @EnableTransactionManagement 开启基于注解的事务管理功能;
    @EnableXXX
  • 5)配置事务管理器来控制事务【重要的一步】
    @Bean
    public PlatformTransactionManager transactionManager() throws Exception{
        return new DataSourceTransactionManager(dataSource());
    }

二、原理

  • 1) @EnableTransactionManagement
    利用 TransactionManagementConfigurationSelector 给容器中会导入组件
    导入两个组件:AutoProxyRegistrar、ProxyTransactionManagementConfiguration

  • 2) AutoProxyRegistrar 给容器中注册一个 InfrastructureAdvisorAutoProxyCreator 组件;后置处理器
    InfrastructureAdvisorAutoProxyCreator ?
    利用后置处理器机制在对象创建之后,包装对象,返回一个代理对象(增强器),代理对象执行方法利用拦截器链进行调用;

  • 3) ProxyTransactionManagementConfiguration 做了什么?
    给容器中注册事务增强器;
    1.事务增强器要用事务注解的信息, AnnotationTransactionAttributeSource 解析事务注解
    2.事务拦截器:
    TransactionInterceptor 保存了事务属性信息,事务管理器;
    它是一个 MethodInterceptor 方法拦截器;
    在目标方法执行的时候;
    执行拦截器链;
    事务拦截器:
    2.1.先获取事务相关的属性;TransactionAttribute
    2.2.再获取 PlatformTransactionManager ;如果事先没有添加指定任何transactionManager,
    最终会从容器中按照类型获取一个PlatformTransactionManager
    2.3.执行目标方法
    如果异常,获取到事务管理器,利用事务管理器回滚操作;
    如果正常,利用事务管理器,提交事务;

相关文章

  • spring事务(二) 声明式事务

    spring事务(二) 声明式事务 知识导读 声明式事务是对编程式事务的包装 声明式事务通过使用AOP来实现,注册...

  • Spring的事务传播行为

    前言 Spring同时支持编程事务策略和声明式事务策略,通常都推荐采用声明式事务策略。使用声明式事务策略的优势十分...

  • Spring的事务机制解析一

    一Spring事务的种类 1.声明式事务 2.编程式事务 二Spring事务的具体描述 (一)声明式事务 1.声明...

  • Spring事务——使用TransactionProxyFact

    Spring同时支持编程式事务策略和声明式事务策略,大部分时候,我们都推荐采用声明式事务策略。使用声明式事务策略的...

  • spring04

    Spring JdbcTemplate学习 Spring 声明式事务 xml配置实现 Spring 声明式事务 注...

  • Spring事务

    基础概念 ​ Spring中事务支持编程式事务和声明式事务。编程式事务由使用者自行编码控制事务;声明式事务则是...

  • 声明式事务

    编程式事务:由程序员编程事务控制代码声明式事务:事务控制代码已由Spring写好,程序员只需声明出哪些方法需要进行...

  • 声明式事务

    步骤 配置类 service Dao test

  • 声明式事务

    编程式事务:1.1 由程序员编程事务控制代码.1.2 OpenSessionInView 编程式事务 声明式事务:...

  • 声明式事务

    管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之...

网友评论

      本文标题:声明式事务

      本文链接:https://www.haomeiwen.com/subject/gjaagrtx.html