我不明白的是,为什么人们说自我调用会破坏交易?
我从未听说过自调用会中断事务。我所知道的是,自调用不会启动新事务,您已经提到了原因。
Spring交易管理规范的摘录
注意
在代理模式(默认设置)下,仅拦截通过代理传入的外部方法调用。这意味着,实际上,即使被调用的方法标有@Transactional,自调用实际上也不会导致运行时实际事务在目标对象中调用目标对象的另一种方法。
如果
@Transaction从中删除注释
saveAB(),则将观察该方法
saveA(),
saveB()即使使用注释,也不会在事务下运行
@Transactional。但是,如果您在类外部调用
saveA()或
saveB()从类外部调用,它将按预期在事务下运行。这就是为什么人们建议对自调用要谨慎的原因。
public void saveAB(A a, B b){ saveA(a); saveB(b);}@Transactionalpublic void saveA(A a){ dao.saveA(a);}@Transactionalpublic void saveB(B b){ dao.saveB(b);}
我认为,自行调用任何公共方法都是一个坏主意。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)