特定のタイプのエラーをキャッチしてログに記録するアスペクトを実装しようとしたとき、私は当初、AfterThrowingのアドバイスを使用してこれが可能になると考えました。ただし、彼のアドバイスは例外をキャッチしていないようですが、例外を処理するための追加のエントリポイントを提供しているだけです。
問題の例外をキャッチする唯一のアドバイスは、AroundAdviceです-それか私が何か間違ったことをしました。
例外をキャッチしたい場合は、AroundAdviceを使用する必要があると誰かが断言できますか?私が使用した構成は次のとおりです。
@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());
}
}
この例では、単なる例であるため、すべての例外をキャッチしたことに注意してください。すべての例外を飲み込むのは悪い習慣ですが、現在のユースケースでは、重複するログロジックを避けながら、1つの特別なタイプの例外をログに記録する必要があります。