【Java】@Transactional 事务注解

Spring事务的回滚机制

Spring的AOP即声明式事务管理默认是针对unchecked exception回滚。Spring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之后来执行commit or rollback(Spring默认取决于是否抛出runtimeException)。

  • 在@Transactional注解的方法中,再调用本类中的其他方法method2时,那么method2方法上的@Transactional注解是不!会!生!效!的!但是加上也并不会报错
  • 如果你在方法中有try{}catch(Exception e){}处理,那么try里面的代码块就脱离了事务的管理,若要事务生效需要在catch中throw new RuntimeException (“xxxxxx”); 或者手动回滚TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  • @Transactional注解的方法必须是公共方法,就是必须是public修饰符!!!【原因:因为JVM的动态代理是基于接口实现的,通过代理类将目标方法进行增强,没有权限访问那么你让我怎么进行】

1、就是@Transactional注解保证的是每个方法处在一个事务,如果有try一定在catch中抛出运行时异常。

2、方法必须是public修饰符。否则注解不会生效,但是加了注解也没啥毛病,不会报错,只是没卵用而已。

3、this.本方法的调用,被调用方法上注解是不生效的,因为无法再次进行切面增强。

你可能感兴趣的:(java)