springaop声明式事务失效
时间: 2023-10-28 09:26:03 浏览: 109
Spring中的AOP不生效
5星 · 资源好评率100%
Spring AOP声明式事务失效的主要原因有以下几种情况:
1. 非public方法失效:只有标注在public级别的方法上的@Transactional才会生效。因为Spring AOP不支持对private、protected方法进行拦截。声明@Transactional的目标方法时,Spring Framework默认使用AOP代理,在代码运行时生成一个代理对象来管理事务。动态代理是通过接口实现的,所以无法支持private和protected方法的拦截。如果需要对protected或private方法进行拦截,建议使用AspectJ。
所以,为了避免事务失效,应确保@Transactional注解的方法是public级别的。
另外,如果使用的是Spring Boot 2.7.1版本,可以看到源码中的TransactionInterceptor类实现了MethodInterceptor接口,用于处理事务的拦截和增强。
总结起来,要避免Spring AOP声明式事务失效,需要注意以下几点:
1. 使用public级别的方法,并在该方法上添加@Transactional注解。
2. 确保使用的Spring版本和相关依赖库的兼容性。
3. 对于需要拦截private或protected方法的情况,建议使用AspectJ。
4. 了解并使用正确的事务配置和管理方式,以确保事务能够正确生效。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
阅读全文