Disons que vous avez trois conseils: autour , avant et après .
1) Est-ce que avant/après est appelé quand continue est appelé dans le autour conseil, .__ ou est-il appelé avant/après le autour conseil comme un ensemble?
2) Si mon autour conseil n'appelle pas procède , Le avant/après conseil sera-t-il exécuté de toute façon?
Avec ce test
@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);
}
}
j'ai la sortie suivante
afin que vous puissiez voir avant/après ne sont pas appelés
Que: 2) Si mes conseils ne suivent pas, le conseil avant/après sera-t-il exécuté de toute façon?
Réponse: Si vous n'appelez pas, suivez votre conseil avant et votre exécution du code sera ignorée, mais votre conseil après sera exécuté. Mais si votre conseil après utilise une valeur de cette méthode, tout sera nul. Donc pratiquement il n'y a aucune raison d'utiliser ce conseil du tout ...
J'espère que j'ai aidé.