事务是面试官经常问的点,如果面试官问到加@Transactional注解的方法之间调用,事务是否生效的问题,我们可以从下面两点方面进行回答:
- 不同类之间的方法调用,如类A的方法a()调用类B的方法b(),这种情况事务是正常起作用的。只要方法a()或b()配置了事务,运行中就会开启事务,产生代理。若两个方法都配置了事务,两个事务具体以何种方式传播,取决于设置的事务传播特性
- 同一个类之间的方法调用
● 如果a方法添加了@Transactional去调用未添加注解的b方法,事务生效
● 如果未添加注解的a方法去调用添加了@Transactional的b方法,事务不生效
● 不生效的原因是代理对象只会在外部第一次访问类的时候被创建,所以本类中调用其他方法的话,如果第一次没有声@Transactional,后面的方法即使添加了@Transactional也不会生效。
借鉴文章:https://blog.csdn.net/blacktal/article/details/79345902