spring 事务的原理?

1 个回答

  • 吴敏
    你爱你的玫瑰是因为你在你的玫瑰上花了太多的时间!
    ### @Transactional 事务实现机制 当 @Transactional 注解的方法被类外部的代码调用时,Spring 在运行时为方法所在类生成一个 AOP 代理对象。代理对象根据 @Transactional 的属性,决定是否由事务拦截器 `TransactionInterceptor` 对此方法进行事务拦截。在进行事务拦截时,会先开启事务,然后执行业务代码,根据执行是否出现异常,通过抽象事务管理器 `AbstractPlatformTransactionManager` 来进行 rollback 或者 commit。 ### Spring AOP 的两种代理 Spring AOP 有两种代理:CglibAopProxy 和 JdkDynamicAopProxy,其中: - **CglibAopProxy**:在其内部类 `DynamicAdvisedInterceptor` 的 `intercept()` 方法中,判断是否进行事务拦截。 - **JdkDynamicAopProxy**:在其 `invoke()` 方法中,判断是否进行事务拦截。 ### 事务操作的底层实现 抽象事务管理器 `AbstractPlatformTransactionManager` 的 rollback 和 commit 都需要具体的实现类进行实现。抽象事务管理器 `AbstractPlatformTransactionManager` 的父级接口是 `PlatformTransactionManager`。存在很多事务管理器实现类,例如 `DataSourceTransactionManager` 等。不同的事务管理器管理不同的数据源,例如 `DataSourceTransactionManager` 管理 JDBC 数据源。应确保被调用方法中使用的数据源都加载了事务管理器。
    编辑于 2024-02-11 12:57 •IP属地 江西
    举报
    评论
    收藏1