Spring - 在同一个类中一个普通方法调用另一个有@Transcational注解的方法时,Spring事务管理还启作用吗?

在同一个类中一个普通方法调用另一个有@Transcational注解的方法时,Spring事务管理还启作用吗?

问题如图所示:

Spring - 在同一个类中一个普通方法调用另一个有@Transcational注解的方法时,Spring事务管理还启作用吗?_第1张图片

即a是加了事务管理注解的,而b没有,这种情况下调用b,spring事务管理还会起作用吗??

答案是不会起作用的。


这是因为:Spring的事务管理是通过AOP实现的,其AOP的实现对于非final类是通过cglib这种方式,即生成当前类的一个子类作为代理类,然后在调用其下的方法时,会判断这个方法有没有@Transactional注解,如果有的话,则通过动态代理实现事务管理(拦截方法调用,执行事务等切面)。当b()中调用a()时,发现b()上并没有@Transactional注解,所以整个AOP代理过程(事务管理)不会发生。

附 使用AOP 代理后的方法调用执行流程


你可能感兴趣的:(Spring)