@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
public class TransactionTest {
/**
* 方法A没事务
*
* @param
* @return void
*/
public String A(){
System.out.println("A方法执行开始!!!");
//生成TransactionTest代理类,再调用B方法,B的事务就回单独生效,并且异常回滚
String result = ((TransactionTest)AopContext.currentProxy()).B();
System.out.println("A方法执行结束!!!");
return result;
}
/**
* 事务B单独的事务
* 使用代理,同一类中A方法调用B方法事务可以生效
* @param
* @return void
*/
@Transactional(rollbackFor = Exception.class)
public String B(){
return "事务B触发成功!!!";
}
}
其实AopContext.currentProxy()的本质是使用的ThreadLocal生成本地代理,这样的做法可能影响性能,后续文章对ThreadLocal的内部原理和性能进行进一步深入!
如果本篇文章对你有帮助的话,很高兴能够帮助上你。
当然,如果你觉得文章有什么让你觉得不合理、或者有更简单的实现方法又或者有理解不来的地方,希望你在看到之后能够在评论里指出来,我会在看到之后尽快的回复你。