基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

Spring 支持哪两种事务管理方式?

知识点图片

Spring 支持以下两种事务管理方式:

1. 编程式事务管理(Programmatic Transaction Management)

编程式事务是指通过编写代码的方式来自定义事务的边界(即何时开启事务、何时提交、何时回滚)。

  • 实现方式
    • 使用 TransactionTemplate(Spring 官方推荐的编程式事务方式)。
    • 直接使用底层的 PlatformTransactionManager
  • 优点:控制粒度非常细,可以精确到代码块级别。比如一个方法中有100行代码,你可以只对中间的10行代码开启事务,从而使得数据库锁定的时间尽可能短,提高并发性能。
  • 缺点:事务管理代码与业务逻辑代码深度耦合,具有强侵入性,导致代码冗余、难以维护。

2. 声明式事务管理(Declarative Transaction Management)

声明式事务是指将事务管理代码从业务方法中分离出来,通过配置的方式来实现事务控制。它的底层实现原理是 AOP(面向切面编程)

  • 实现方式
    • 基于注解:使用 @Transactional 注解(目前最主流、最常用的方式)。
    • 基于 XML 配置:使用 <tx:advice> 和 AOP 切面配置(早期 Spring 项目常用,现在已较少使用)。
  • 优点:业务代码极其干净,完全没有事务管理的侵入,开发者只需要关注业务逻辑;配置简单,易于维护。
  • 缺点:控制粒度较粗,最小只能作用于方法级别,无法像编程式事务那样精确到具体的代码块。此外,如果不了解 Spring AOP 的代理机制,容易踩坑导致事务失效(例如:在同一个类中,非事务方法调用事务方法时,事务会失效)。

总结与最佳实践:
在绝大多数的日常开发中,强烈推荐使用“声明式事务管理(@Transactional 注解)”。只有在对性能要求极高、事务执行时间必须严格控制在极短范围内的极其特殊的场景下,才会考虑使用编程式事务。

00:00
00:00