en essayant de mettre en œuvre un aspect, qui est responsable de la capture et l'enregistrement d'un certain type d'erreur, je pensais au départ que ce serait possible en utilisant les conseils AfterThrowing. Cependant, il semble que son conseil n'attrape pas l'exception, mais fournit simplement un point d'entrée supplémentaire pour faire quelque chose avec l'exception.Spring AOP AfterThrowing contre Around conseils
Le seul conseil qui a également Intercepter l'exception en question serait alors un AroundAdvice - ça ou je l'ai fait quelque chose de mal.
Quelqu'un peut-il affirmer que bien si je veux attraper l'exception que je dois utiliser un AroundAdvice? La configuration je suit:
@Pointcut("execution(* test.simple.OtherService.print*(..))")
public void printOperation() {}
@AfterThrowing(pointcut="printOperation()", throwing="exception")
public void logException(Throwable exception) {
System.out.println(exception.getMessage());
}
@Around("printOperation()")
public void swallowException(ProceedingJoinPoint pjp) throws Throwable {
try {
pjp.proceed();
} catch (Throwable exception) {
System.out.println(exception.getMessage());
}
}
Notez que dans cet exemple, je pris toutes les exceptions, car il est juste un exemple. Je connais sa mauvaise habitude d'avaler toutes les exceptions, mais pour mon cas d'utilisation actuel, je veux qu'un type spécial d'exception soit simplement enregistré tout en évitant la logique de journalisation en double.
Vous vraiment ne serait pas utiliser à la fois autour des conseils et après avoir jeté des conseils sur la même joinpoint comme celui-ci. Autour du conseil est holistique et vous permet de contrôler complètement l'exécution. Comme il n'est pas possible qu'une exception soit ignorée par votre conseil (à cause du bloc try/catch que vous avez qui ne relance pas l'exception), le conseil after throw ne sera jamais appliqué. –