Spring事务(二)-@Transactional事务失效的场景

Spring事务(二)-@Transactional事务失效的场景

  有时候,我们明明在类或者方法上添加了@Transactional注解,却发现方法并没有按事务处理。其实,以下场景会导致Spring的@Transactional事务失效。

1、事务方法所在的类没有加载到Spring IOC容器中。

  @Transactional是Spring的注解,未被Spring管理的类中的方法不受@Transactional注解控制,这个应该很好理解。

2、方法没有被public修饰。

  众所周知,java的访问权限修饰符有:privatedefaultprotectedpublic四种,但是@Transactional注解只能作用于public修饰的方法上。具体为什么会这样,我也没理解,就先记住吧。

3、在同一个类中的方法调用@Transactional方法。

  假如在同一个类中有A、B两个方法,如下:

@Service
public class UserServiceImpl {

    @Autowired
    UserMapper userMapper;

    public void A() {
        B();
    }

    @Transactional
    public void B() {
        userMapper.deleteById(1);
        int i = 10 / 0; //模拟发生异常
    }
    
}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Spring事务(二)-@Transactional事务失效的场景