两个aspect,在不干预order的情况下,advice的执行顺序如下
@Around any public method.start
@Before any public method.
@Around any public method.(2)start
@Before any public method.(2)
execute()...
@Around any public method.(2)end
@After any public method.(2)
@AfterReturning any public method.(2)
@Around any public method.end
@After any public method.
@AfterReturning any public method.
作者回复: 666
2
廿七
2021-02-24
同一个AspectConfiguration中多个@Before,不能控制顺序
@Aspect
public class AspectConfiguration {
@Pointcut("execution(public * *(..))") // 匹配 Join Point
private void anyPublicMethod() { // 方法名即 Pointcut 名
System.out.println("@Pointcut at any public method.");
}
@Order(Ordered.LOWEST_PRECEDENCE - 2 )
@Before("anyPublicMethod()") // Join Point 拦截动作
public void beforeAnyPublicMethod() throws Throwable {
System.out.println("@Before any public method.");
}
@Order(Ordered.LOWEST_PRECEDENCE)
@Before("anyPublicMethod()")
public void beforeAnyPublicMethod2() throws Throwable {
System.out.println("@Before any public method.(2)");
}
展开
作者回复: 这个无法控制,通常是将 @Order 配置在 Configuration Class 上,并且方法列表在反射中也是不稳定的顺序,所以建议还是通过 XML 方式配置。