赞
踩
如下面这段代码:
- public void insertEntity(Test entity) {
- this.saveEntity(entity);}@Transactionalprivate Test saveEntity(Test entity) {
- demoRepository.save(entity); throw new NullPointerException("test only");}
当然了,这个是比较低级的错误了,相信除非手误,不然一般不会犯这个错。特别是,如果你使用IDEA,直接会提示出错误信息给你,并且给你了修复建议:
于是,我们按照提示修复,给方法声明成public,再来试一次:
Spring事务使用的是AOP方式对业务方法做了增强,如下图所示:(来自Spring官网)
而AOP实现是使用了动态代理,所以必须是从代理方法调用才拥有事务增强的能力,走内部方法,事务自然就失效了。同时也解释了,为什么不能注解在private方法上,还是因为动态代理啊,private是无法被代理到的。以下来自Spring官方文档说明
Due to the p
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。