我们假设你有三个建议:围绕,之前和之后。
1)在围绕建议中调用继续时,之前/之后被调用, 或者他们在整个围绕建议之前/之后被称为?
2)如果我的围绕建议没有致电继续, 是否会运行之前/之后建议?
答案 0 :(得分:38)
使用此测试
@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);
}
}
我有以下输出
所以你可以看到之前/之后不被称为
答案 1 :(得分:0)
问题:2)如果我的周围建议未致电进行,那么之前/之后建议是否仍会运行?
回答:如果您不调用周围的建议,则会跳过之前的建议和代码执行,但会执行之后的建议。但是,如果您的之后的建议使用该方法中的任何值,则所有内容为null因此,实际上根本没有必要使用该建议...
希望,我帮了忙。