@Transactional注解标注方法为非public时失效
- @Transactional是基于动态代理实现的,在bean初始化过程中,对有@Transactional标注的bean实例创建代理对象,这是一个spring扫描@Transactional注解信息的过程。
- 扫描到@Transactional的方法,如果其修饰符不是public,那么就默认方法的@Transactional信息为空,那么将不会对bean进行代理对象创建也不会对方法进行代理调用。
类内部调用带@Transactional标注的方法失效
- 在类内部调用类内部的事务方法,这个调用事务方法的过程并不是通过代理对象来调用的,而是直接通过this对象来调用方法,绕过的代理对象,肯定就是没有代理逻辑了。
事务方法内部捕捉了异常失效
- 事务想要回滚,必须能够捕捉到异常才行,如果异常中途被捕捉掉,那么事务将不会回滚。