在开发中遇到,aop拦截事物方法,先执行了,自己写的切面,Transaction还没提交
原因:spring Transaction也是aop实现,spring 先执行了自己定义的切面aop
解决方法:设置aop执行顺序,order越小越先执行
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" order="0"/>
@Component
@Aspect @Order(1) public class YourAspect
网上摘抄了一段各注解执行顺序,待测
Spring 中通知的类型:
Around org.aopalliance.intercept.MethodInterceptor 栏截对目标对象方法的调用
Before org.springframework.aop.MethodBeforAdvice 在目标方法被调用之前调用 After org.springframework.aop.AfterReturningAdvice 当目标方法被调用之后调用Thorws org.springframework.aop.ThrowsAdvice 当目标方法抛出异常时调用
程序正常执行顺序:
执行前 -环绕通知 Around
执行前 - 通知 Before
POINT - 切入点 方法前执行 @Before
POINT - 切入点 环绕方法前执行 @Around
POINT - 切入点 方法后执行 @AfterReturning
POINT - 切入点 环绕方法后执行 @Around
执行后 - 通知 After
执行后 - 环绕通知 Around
程序抛出异常执行顺序:
执行前 -环绕通知 Around
执行前 - 通知 Before
POINT - 切入点 方法前执行 @Before
POINT - 切入点 环绕方法前执行 @Around
切入点异常处理通知 @AfterThrowing
异常处理通知 Thorws