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层⽅法B, A和B⽅法本身都已经被添加了事务控制,那么A调⽤B的时候,就需要进⾏事务的⼀些协商,这就叫做事务的传播⾏为
A调⽤B,我们站在B的⻆度来观察来定义事务的传播⾏为
对于传播行为,声明式事物通过事务属性控制,后续有合适案例继续更新。