众所周知,Spring 声明式事务是基于 AOP 实现的,那么,如果我们在同一个方法自定义多个 AOP,我们如何指定他们的执行顺序呢?
三种解决方案
1、通过实现 org.springframework.core.Ordered 接口
@Component
@Aspect
@Slf4j
public class MessageQueueAopAspect1 implements Ordered{@Override
public int getOrder() {
// TODO Auto-generated method stub
return 2;
}
}
2、通过 @Order 注解(推荐)
- order 越小越先执行
@Component
@Aspect
@Slf4j
@Order(1)
public class MessageQueueAopAspect1{
...
}
3、通过配置文件配置
<aop:config expose-proxy="true">
<aop:aspect ref="aopBean" order="0">
<aop:pointcut id="testPointcut" expression="@annotation(xxx.xxx.xxx.annotation.xxx)"/>
<aop:around pointcut-ref="testPointcut" method="doAround" />
</aop:aspect>
</aop:config>