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放在后面,但有时候却不是按照这样的顺序
谢谢
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接口的情况下,执行顺序就是定义在切面中的通知的顺序。