AspectJ “around” 和 “continue” with “before/after”
假设您有三个建议:周围,之前和之后。
1)在周围建议中调用进行时,是在之前/之后调用,还是在周围建议作为一个整体调用之前/之后调用?
2)如果我的周围建议没有调用继续,那么之前/之后的建议无论如何都会运行吗?
假设您有三个建议:周围,之前和之后。
1)在周围建议中调用进行时,是在之前/之后调用,还是在周围建议作为一个整体调用之前/之后调用?
2)如果我的周围建议没有调用继续,那么之前/之后的建议无论如何都会运行吗?
通过此测试
@Aspect
public class TestAspect {
private static boolean runAround = true;
public static void main(String[] args) {
new TestAspect().hello();
runAround = false;
new TestAspect().hello();
}
public void hello() {
System.err.println("in hello");
}
@After("execution(void aspects.TestAspect.hello())")
public void afterHello(JoinPoint joinPoint) {
System.err.println("after " + joinPoint);
}
@Around("execution(void aspects.TestAspect.hello())")
public void aroundHello(ProceedingJoinPoint joinPoint) throws Throwable {
System.err.println("in around before " + joinPoint);
if (runAround) {
joinPoint.proceed();
}
System.err.println("in around after " + joinPoint);
}
@Before("execution(void aspects.TestAspect.hello())")
public void beforeHello(JoinPoint joinPoint) {
System.err.println("before " + joinPoint);
}
}
我有以下输出
因此,当从注释中调用继续时,您可以看到之前/之后未被调用。@Around
Que:2)如果我的周围建议没有调用继续,那么之前/之后的建议无论如何都会运行吗?
答:如果你不在你的周围建议中调用继续,你的之前的建议以及你的代码执行将被跳过,但你的后建议将被执行。但是,如果您的建议使用该方法中的任何值,则所有内容都将为空。因此,实际上根本没有使用该建议的任何意义......
希望,我帮助了。