SpringAOP应用之声明式事务

  什么是声明式事务呢?即使用注解来选择需要使用事务的方法,当然也可以是整个类。本文示范声明式事务的具体使用,采用注解方式。

  所有数据访问技术都提供事务处理机制,这些技术提供了API用来开启事务、提交事务完成数据操作,或者在发生错误的时候回滚数据。Spring本身并不支持事务实现,同时只是负责提供标准接口来处理不同数据访问技术的事务处理。该机制提供了一个TransactionManager的接口,不同数据访问技术实现使用不同的接口实现:

            

   应用底层如何支持怎么样的事务,需要提供具体实现类——这也是策略模式(七、策略模式)在spring中的应用之一。这些具体的实现通过Spring AOP织入实际的业务中。从上图中可知在Spring框架中,也内置了一些具体策略,例如: DataSourceTransactionManager(JDBC) , JtaTransactionManager (分布式)等。

  DataSourceTransactionManager为例示例事务(本质就是使用aop将事务控制逻辑编织入到业务代码),本文以注解的方式:

    1)依赖:

            

     2)配置:

      数据源配置:

            

            

     3)代码:

            

    4)测试结果:

            

    以上并没有使用声明式事务,报错信息中也没有相关内容。下面增加生命式事务的配置:

    1)

            

            

    2)测试结果:

            

     通过测试结果,可以观察到事务work了。为什么声明式事务是AOP的应用之一呢?通过下图调试信息,可以清晰的观察到执行了初始化后的后置处理器:

            

            

     在Spring核心思想之 AOP:在自定义容器基础上实现AOP功能中基本阐述了AOP的实现思想。此处就是SpringAOP发挥了作用,使声明式事务work了。

   补充:以上是声明式事务的简单应用,实际事务往往对service层进⾏控制,如果出现service层⽅法A调⽤了另外⼀个service层⽅法BAB⽅法本身都已经被添加了事务控制,那么A调⽤B的时候,就需要进⾏事务的⼀些协商,这就叫做事务的传播⾏

    A调⽤B,我们站在B的⻆度来观察来定义事务的传播⾏为
            

    对于传播行为,声明式事物通过事务属性控制,后续有合适案例继续更新。

 

posted on 2021-11-16 10:19  池塘里洗澡的鸭子  阅读(99)  评论(0编辑  收藏  举报