`

spring Aop 事务控制

阅读更多
做开发几年了,一直也没搞清楚spring的事务传播性怎么回事,用的不太到位,经常出问题,最近在架构师课程上又学习到了这个地方,正好我们现在做的项目也用到了.


public class ServiceA{

   private ServiceB b;
 
    void a(){
      b.b3();
    }

}


public class ServiceB{

    void b1();
    void b2();

    void b3(){
       b1();
       b2();
    }

}

假如传播性是 REQUIRED_NEW ,ServiceA,ServiceB 的 里面的方法都符合spring的切点规则,那么在调用 a() 的时候spring 容器会创建几个事务? 答案是2个. 在调用a()的时候一个,b.b3()此时又一个,虽然 b1(),b2()也符合切点规则但spring不会为他们2个启动新的事务.原因我们要从AOP的实现原理上来分析.
    我们说AOP是在IOC的基础上出来的,没有IOC其实就没有AOP.spring 是利用代理来完成事务控制的.
// 这里假设是cglib代理
public class ServiceAProxy extends ServiceA{

   private ServiceA svcA;
 
    void a(){
      begin transaction
      svcA.a();
      end transaction
    }

}

public class ServiceBProxy extends  ServiceB {

   private  ServiceB svcB;

    void b1(){
      begin transaction
      svcB.b1();
      end transaction
    }
    void b2(){
      begin transaction
      svcB.b2();
      end transaction
    }

    void b3(){
      begin transaction
       svcB.b3();
      end transaction
    }

}


这样在调用a.a()时 只调用了A的代理方法a() 和 b的代理方法 b3(),所以只开启了2个事务.


分享到:
评论

相关推荐

    Spring AOP配置事务方法

    Spring AOP 配置事务方法 Spring AOP(Aspect-Oriented Programming,面向方面编程)是一种编程范式,它允许开发者在不修改源代码的情况下,增强和修改应用程序的行为。 Spring AOP 提供了一种灵活的方式来实现事务...

    spring aop jar 包

    在实际开发中,Spring AOP广泛应用于事务管理。例如,我们可以定义一个切面来处理所有数据库操作的事务,这样无需在每个业务方法中显式调用开始和提交事务,只需在切面中配置事务规则即可。 `aop-jar`这个压缩包...

    java springAOP 事务+注释

    Java Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改原有代码的情况下,通过代理方式插入额外的功能,如日志、事务管理等。在这个主题中,我们将深入探讨Spring AOP如何处理事务管理...

    Spring AOP 16道面试题及答案.docx

    总的来说,Spring AOP通过代理和通知机制,实现了横切关注点的模块化,使得业务逻辑与系统服务(如日志、事务等)解耦,提高了代码的可读性和可维护性。同时,引介功能进一步增强了切面的功能,可以为对象动态地添加...

    简单spring aop 例子

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...

    Spring AOP完整例子

    总结一下,Spring AOP提供了一种优雅的方式来处理系统的横切关注点,如日志记录、事务管理或性能监控。通过定义切点、创建切面和配置通知,我们可以实现代码的解耦,提高可维护性和复用性。这个例子提供了学习Spring...

    spring aop依赖jar包

    现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...

    Spring AOP实现机制

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的可复用性和可维护性。 ### 1. ...

    Spring AOP面向方面编程原理:AOP概念

    4. **丰富的切入点表达式语言**:Spring AOP支持使用SpEL(Spring Expression Language)来定义复杂的切入点表达式,这让开发者能够更加灵活地控制通知的触发条件。 #### 四、Spring AOP的实现示例 接下来,我们...

    mybatis 拦截器 + spring aop切面 + spring事务+ 反射工具类

    在IT行业中,MyBatis、Spring AOP、Spring事务管理和反射工具类是常见的技术栈,它们在构建高效、灵活的企业级应用中起着至关重要的作用。以下是对这些知识点的详细阐述: 1. MyBatis拦截器(MyBatis Interceptor)...

    spring AOP依赖三个jar包

    - **事务管理**:Spring AOP的一个常见应用就是声明式事务管理,通过`@Transactional`注解可以轻松地在方法级别控制事务。 综上所述,spring AOP依赖的这三个jar包构成了Spring框架面向切面编程的基础,它们共同...

    spring aop 五个依赖jar

    在Spring AOP中,你可以选择使用AspectJ的编译时或运行时织入,以实现更细粒度的控制和更高的性能。 2. **aspectjweaver.jar**:AspectJ Weaver是AspectJ框架的一部分,主要负责在运行时对类进行字节码操作,实现切...

    spring AOP 引入jar包,spring IOC 引入Jar包

    Spring AOP(面向切面编程)允许开发者在不修改源代码的情况下,通过“切面”来插入新的行为或增强已有功能,而 Spring IOC(控制反转)则负责管理对象的生命周期和依赖关系,极大地简化了应用的架构。 **Spring ...

    spring基于AOP实现事务

    同时,由于事务管理是基于AOP的,因此可以灵活地应用于多个方法,而无需重复编写相同的事务控制代码。 总结一下,Spring基于AOP实现的事务管理通过TransactionProxyFactoryBean,结合声明式事务配置,能够提供一种...

    无处不在的Spring AOP事务及踩过的坑

    Spring AOP事务管理是Java开发中的重要组成部分,它极大地简化了在分布式系统中对事务的处理。Spring通过AOP(面向切面编程)提供了一种声明式事务管理方式,允许开发者将事务规则与业务逻辑分离,提高了代码的...

    spring aop 学习笔记

    - **事务管理**:通过AOP实现声明式事务管理,简化事务控制代码。 - **性能监控**:在关键方法前、后插入性能计时通知,便于性能分析。 - **权限校验**:在方法执行前进行用户权限验证,确保安全。 5. **源码...

    spring-aop实例

    9. **应用场景**:Spring AOP常用于日志记录、事务管理、性能监控、安全性控制等。例如,你可以定义一个切面来记录所有服务层方法的调用,或者在每次数据库操作前开启事务并在操作成功后提交事务。 通过以上介绍,...

    Spring AOP IOC源码笔记.pdf

    Spring框架是Java开发中不可或缺的一部分,它主要由两个核心组件构成:IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。本笔记将深入探讨这两个概念以及它们在Spring中...

    spring aop用到jar包.rar

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点,如日志、事务管理、性能监控等。在使用Spring AOP时,通常需要引入特定的jar包来支持其功能。...

    spring aop的demo

    在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...

Global site tag (gtag.js) - Google Analytics