1.同一个类中 事务publicA调非事务B B抛异常 AB事务生效(具有传播性)
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
}
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}
2.同一个类中 事务A调非事务B A抛异常 AB事务生效
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
//促发异常
if(3/0==1)
System.out.println("");
}
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}

3.同一个类中 事务A调事务B A抛异常 AB事务生效
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
//促发异常
if(3/0==1)
System.out.println("");
}
@Transactional
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}

4.同一个类中 事务A调掉事务B B抛异常 AB事务生效
@Override
@Transactional
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
}
@Transactional
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}

5.同一个类中 非事务A调事务B B抛异常 A无事务 B事务不生效
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
B();
}
@Transactional
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}

6.同一个类中 非事务A调事务B(通过注入-相当于调用不同类中的B方法) B抛异常 A无事务,B事务生效
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
userService.B();
}
@Transactional
@Override
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
//促发异常
if(3/0==1)
System.out.println("");
}

7.同一个类中 非事务A调事务B(通过注入) A抛异常 A无事务,B不促发事务,ab数据都会增加成功
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
userService.B();
//促发异常
if(3/0==1)
System.out.println("");
}
@Transactional
@Override
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}

8.同一个类中 事务A调非事务B(通过注入)A或B抛异常 AB事务生效 (事务传播性)
@Transactional
@Override
public void A() {
User u = new User();
u.setAccount("test");
u.setName("1");
u.setMobile("12345678912");
u.setPassword("111");
this.save(u);
userService.B();
//促发异常
if(3/0==1)
System.out.println("");
}
@Override
public void B() {
User u1 = new User();
u1.setAccount("test1");
u1.setName("2");
u1.setMobile("12345678913");
u1.setPassword("111");
this.save(u1);
}
总结:1.事务A
调B ,AB都有事务(事务传播性)2.非事务A
调事务B,A都无事务,B只有通过注入(AOP)方式调用的时候,B的事务才生效。3.private不能加事务 4.声明式事务如果要细化,可以拆分方法
非事务A
调事务B(AOP)方式可以用xxxService xxxService = (xxxService)(AopContext.currentProxy());然后xxxService.B(),获取到xxxService的代理类,再调用事务方法,强行经过代理类,激活B事务切面。