如何控制spring aop 拦截顺序

spring aop中对同一个joinpoint的两个before advice (a 和 b) ,如何实现先对a后对b进行拦截
[code="java"]
@Before("somePointCut()")
public void b() {
//doSomeThing
}

@Before("somePointCut()")
public void a() {
    //checking

}

[/code]
以前我试过把a放在前面,b放在后面,但有时候却不是按照这样的顺序

谢谢

3个回答

Spring文档说明:
[quote]6.2.4.7. 通知(Advice)顺序
如果有多个通知想要在同一连接点运行会发生什么?Spring AOP 的执行通知的顺序跟AspectJ的一样。... 对于定义在相同切面的通知,根据声明的顺序来确定执行顺序。比如下面这个切面:[/quote]
[code="java"]@Aspect
public class AspectWithMultipleAdviceDeclarations {

@Pointcut("execution(* foo(..))")
public void fooExecution() {}

@Before("fooExecution()")
public void doBeforeOne() {
// ...
}

@Before("fooExecution()")
public void doBeforeTwo() {
// ...
}[/code]

[quote]换言之,因为doBeforeOne先定义,它会先于doBeforeTwo执行,[/quote]

在spring里面拦截的时候有拦截的方法的表达式
你可以写拦截的表达式进行拦截

可以看看Reference中关于通知顺序方面的章节的说明。再没有实现org.springframework.core.Ordered接口的情况下,执行顺序就是定义在切面中的通知的顺序。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问