@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
public class TransactionTest {
/**
* 方法A没事务
*
* @param
* @return void
*/
public String A(){
("A方法执行开始!!!");
//生成TransactionTest代理类,再调用B方法,B的事务就回单独生效,并且异常回滚
String result = ((TransactionTest)()).B();
("A方法执行结束!!!");
return result;
}
/**
* 事务B单独的事务
* 使用代理,同一类中A方法调用B方法事务可以生效
* @param
* @return void
*/
@Transactional(rollbackFor = )
public String B(){
return "事务B触发成功!!!";
}
}
其实()的本质是使用的ThreadLocal生成本地代理,这样的做法可能影响性能,后续文章对ThreadLocal的内部原理和性能进行进一步深入!