经常使用Spring AOP 做切面, 但是会遇到一个问题. 当在同一个类中, 调用当前类下其他方法时候, 会导致切面失效. 即:类自调用问题
问题描述:
例如: B()调用 A() 方法. 按照第一直觉, B()中调了A() 之后, 因为A()有事务注解, 事务是会生效的. 但实际不会生效.
public class OrderService{
@Transactional
public void methodA(){
}
public void methodB(){
methodA();
}
}
Spring 生成代理类. 大致如下.
public class OrderServiceProxyXxxx{
OrderService orderService;
public void methodA(){
beginTransaction();
orderService.methodA();
endTransaction();
}
public void methodB(){
orderService.methodB();
}
}
问题定位:
1. 先调用B()方法. 再B()中调用A():
由于沒有增加@Transactional. 代理类中实际是直接调用目标类中的方法. 目标类中B() 再调用目标类A().
调用顺序: OrderServicePr