所有数据访问技术都提供事务处理机制,这些技术提供了API用来开启事务、提交事务完成数据操作,或者在发生错误的时候回滚数据。Spring本身并不支持事务实现,同时只是负责提供标准接口来处理不同数据访问技术的事务处理。该机制提供了一个TransactionManager的接口,不同数据访问技术实现使用不同的接口实现:
应用底层如何支持怎么样的事务,需要提供具体实现类。这也是策略模式在spring中的应用之一。这些具体的实现如何应用到业务中就需要Spring AOP。从上图中可知在Spring框架中,也内置了一些具体策略,例如: DataSourceTransactionManager(JDBC) , JtaTransactionManager (分布式)等等。
什么是声明式事务呢?即使用注解来选择需要使用事务的方法,当然也可以是整个类。Spring支持声明式事务,使用@Transactional注解表示。
以DataSourceTransactionManager为例示例事务(本质就是使用aop将事务控制逻辑编织入到业务代码):
1)依赖:
2)配置:
xml:
如混合注解:
注解:
在接口、类或方法上添加@Transactional注解
补充:事务往往在service层进⾏控制,如果出现service层⽅法A调⽤了另外⼀个service层⽅法B, A和B⽅法本身都已经被添加了事务控制,那么A调⽤B的时候,就需要进⾏事务的⼀些协商,这就叫做事务的传播⾏为
A调⽤B,我们站在B的⻆度来观察来定义事务的传播⾏为