您的位置:首页 > 娱乐 > 八卦 > 网页设计制作是干什么的_西安网站模板建站_小红书seo是什么_网络营销和网站推广的区别

网页设计制作是干什么的_西安网站模板建站_小红书seo是什么_网络营销和网站推广的区别

2025/1/12 15:15:32 来源:https://blog.csdn.net/C18298182575/article/details/144929173  浏览:    关键词:网页设计制作是干什么的_西安网站模板建站_小红书seo是什么_网络营销和网站推广的区别
网页设计制作是干什么的_西安网站模板建站_小红书seo是什么_网络营销和网站推广的区别

61 张图,剖析 Spring 事务,就是要钻到底!

拜托!面试请不要再问我 @Transactional

my:

AOP

@Transactional

PlatformTransactionManager:数据源隔离

TransactionInterceptor:拦截添加了注解的方法,执行事务管理流程

代理对象:方法添加了注解,spring会自动创建代理对象,并且该对象对在方法执行前后插入事物管理逻辑

执行流程:

开启事务

执行方法

提交或回滚


Spring 事务管理的底层原理主要涉及 声明式事务管理编程式事务管理,它们是通过 Spring 提供的事务管理框架对数据访问进行一致性管理。Spring 事务管理的底层依赖于 AOP(面向切面编程)和 PlatformTransactionManager 接口,以下是详细解析。

1. 事务管理的核心接口:PlatformTransactionManager

public interface PlatformTransactionManager {TransactionStatus getTransaction(TransactionDefinition var1) throws TransactionException;void commit(TransactionStatus var1) throws TransactionException;void rollback(TransactionStatus var1) throws TransactionException;
}

Spring 提供了 PlatformTransactionManager 接口,它是所有事务管理器的统一接口。不同的事务管理器实现了这个接口,以支持不同的数据源和事务模型(例如,JDBC、JPA、Hibernate、JTA等)。常见的实现包括:

  • DataSourceTransactionManager:用于单数据源的 JDBC 事务。
  • JpaTransactionManager:用于 JPA 事务。
  • HibernateTransactionManager:用于 Hibernate 事务。
  • JtaTransactionManager:用于分布式事务(通常在多个数据源的情况下使用)。

2. 声明式事务管理

Spring 最常用的事务管理方式是声明式事务管理,它通过 AOP 技术在方法执行时自动处理事务的开始、提交、回滚等操作。声明式事务是基于 @Transactional 注解或者 XML 配置的。其底层原理依赖于 AOP 切面技术。

过程:
  • 事务注解 (@Transactional):当一个方法或类上使用 @Transactional 注解时,Spring 会自动生成一个代理对象,该对象会在方法执行前后插入事务管理逻辑。

  • 事务拦截器:Spring 使用 TransactionInterceptor 来拦截带有 @Transactional 注解的方法调用。TransactionInterceptor 会判断当前方法是否需要事务支持,并执行事务的管理流程。

    具体流程:

    1. 方法调用时,事务拦截器会检查目标方法是否需要事务支持(通过注解或者 XML 配置)。
    2. 开启事务:如果需要,事务管理器会根据配置(如传播行为、隔离级别等)启动事务。
    3. 业务方法执行:在事务上下文中执行业务逻辑。
    4. 提交/回滚事务:如果业务方法执行成功,事务会被提交;如果发生异常,事务会被回滚。
关键技术:
  • AOP代理:Spring 会为标记了 @Transactional 注解的类生成一个动态代理(通常是 JDK 动态代理或 CGLIB 代理),代理对象会在方法执行前后插入事务管理代码。
  • TransactionAspectSupport:在 TransactionInterceptor 中,TransactionAspectSupport 负责处理事务的创建、提交和回滚。

3. 事务传播行为(Propagation)

事务传播行为决定了一个事务在多个方法调用之间的传播方式。Spring 支持7种常见的传播行为(默认是 Propagation.REQUIRED):

  1. REQUIRED:如果存在事务,则加入该事务;如果没有事务,则创建一个新的事务。
  2. REQUIRES_NEW:创建一个新的事务,并挂起当前事务。
  3. SUPPORTS:如果存在事务,则加入该事务;如果没有事务,则以非事务方式执行。
  4. NOT_SUPPORTED:如果存在事务,则挂起当前事务;如果没有事务,则以非事务方式执行。
  5. MANDATORY:如果存在事务,则加入该事务;如果没有事务,则抛出异常。
  6. NEVER:如果存在事务,则抛出异常;如果没有事务,则以非事务方式执行。
  7. NESTED:如果存在事务,则在当前事务中创建一个嵌套事务;如果没有事务,则创建一个新的事务。

4. 事务隔离级别(Isolation)

事务隔离级别决定了一个事务对其他事务的可见性。Spring 支持以下四种隔离级别:

  1. READ_UNCOMMITTED:最低级别,允许读取未提交数据,可能导致脏读。
  2. READ_COMMITTED:只允许读取已提交的数据,避免脏读。
  3. REPEATABLE_READ:保证在一个事务中多次读取同一数据时,数据不会变化,避免脏读和不可重复读。
  4. SERIALIZABLE:最高隔离级别,事务完全串行化,避免脏读、不可重复读和幻读。

5. 事务回滚规则

Spring 默认情况下,只有在 运行时异常(RuntimeException)Error 发生时回滚事务。对于 检查性异常(checked exceptions),Spring 默认是不会回滚的。通过 @Transactional 注解的 rollbackFornoRollbackFor 属性,可以自定义回滚规则。

6. 事务管理的底层实现(AOP和事务拦截器)

Spring 使用 AOP 技术来管理事务的切入点和执行。基本步骤如下:

  1. Spring 在方法调用时通过 AOP 代理拦截方法。
  2. 如果方法上标记了 @Transactional 注解,事务拦截器就会执行。
  3. 事务拦截器会调用 PlatformTransactionManager 实现,决定是否开启、提交或回滚事务。

7. 编程式事务管理

编程式事务管理是指在代码中显式地控制事务的开始、提交和回滚。这通常在需要更多事务控制的情况下使用。例如,手动创建 TransactionStatus 和通过 PlatformTransactionManager 提交或回滚事务。尽管不如声明式事务方便,但它可以提供更精细的控制。

编程式事务管理示例:
@Transactional
public void exampleMethod() {PlatformTransactionManager transactionManager = context.getBean(PlatformTransactionManager.class);TransactionDefinition definition = new DefaultTransactionDefinition();TransactionStatus status = transactionManager.getTransaction(definition);try {// 业务逻辑代码transactionManager.commit(status);  // 提交事务} catch (RuntimeException e) {transactionManager.rollback(status);  // 回滚事务throw e;}
}

总结

Spring 事务管理的底层原理基于 AOPPlatformTransactionManager,通过拦截器和事务管理器来控制事务的生命周期。Spring 提供了声明式和编程式两种事务管理方式,最常用的是声明式事务,它通过 AOP 代理技术在方法执行时自动处理事务的开始、提交和回滚。Spring 事务管理支持事务传播行为、隔离级别和回滚规则等多种配置选项,提供灵活而强大的事务管理能力。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com