Spring AOP AfterThrowing vs. Around Advice

Beim Versuch, einen Aspekt zu implementieren, der für das Abfangen und Protokollieren eines bestimmten Fehlertyps verantwortlich ist, dachte ich zunächst, dass dies mit dem AfterThrowing-Rat möglich wäre. Es scheint jedoch, dass sein Rat die Ausnahme nicht erfasst, sondern lediglich einen zusätzlichen Einstiegspunkt bietet, um etwas mit der Ausnahme zu tun.

Der einzige Rat, der auch die fragliche Ausnahme auslösen würde, wäre dann ein AroundAdvice - entweder das oder ich habe etwas falsch gemacht.

Kann jemand behaupten, dass ich ein AroundAdvice verwenden muss, wenn ich die Ausnahme abfangen möchte? Die Konfiguration, die ich verwendet habe, lautet wie folgt:

@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());
  }
}

Beachten Sie, dass ich in diesem Beispiel alle Ausnahmen abgefangen habe, da es sich nur um ein Beispiel handelt. Ich kenne die schlechte Praxis, nur alle Ausnahmen zu verschlucken, aber für meinen aktuellen Anwendungsfall möchte ich, dass ein besonderer Ausnahmetyp nur protokolliert wird, während doppelte Protokollierungslogik vermieden wird.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage