为了方便,使用伪代码表示:)
1、同一个类,两个方法上都有事务
class A {
@Transactional
function T1() {
curd 操作1
T2()
}
@Transactional
function T2() {
curd 操作2
抛异常
}
}
结果:操作1和操作2都回滚
2、同一个类,被调用的方法上才有事务
class A {
function T1() {
curd 操作1
T2()
}
@Transactional
function T2() {
curd 操作2
抛异常
}
}
结果:操作1和操作2都不回滚
3、同一个类,主方法上才有事务
class A {
@Transactional
function T1() {
curd 操作1
T2()
}
function T2() {
curd 操作2
抛异常
}
}
结果:操作1和操作2都回滚
4、不同类,两个方法上都有事务
class A {
@Transactional
function T1() {
curd 操作1
B.T2()
}
}
class B {
@Transactional
function T2() {
curd 操作2
抛异常
}
}
结果:操作1和操作2都回滚
5、不同类,被调用的方法上才有事务
class A {
function T1() {
curd 操作1
B.T2()
}
}
class B {
@Transactional
function T2() {
curd 操作2
抛异常
}
}
结果:只有操作2回滚
几篇关于Spring事务,动态代理的好文章:
Spring 容器AOP的实现原理动态代理 https://www.cnblogs.com/cfas/p/9307546.html
使用动态代理实现对事务的控制 https://blog.csdn.net/a2231476020/article/details/93233115