次のようなコード:
public class A {
@Autoware
private B b;
public void a() {
//AAA: some logic process that maybe throw exception
b.b();
}
}
public class B {
public void b() {
//BBB: some logic process maybe also throw exception
}
}
Aa() と Bb() の両方の例外はインターセプトする必要があるため、 @AfterThrowing アノテーションを使用してそれを行います。しかし問題は、他のコードで Aa() を呼び出し、Bb() で例外が発生した場合、アドバイスが 2 回実行されることです。Bb() で発生した例外が呼び出し元の Aa() に伝搬していたためです。
spring-amqp を使用しているため、例外を静かに飲み込むことはできません。上記のコードはコンシューマー側にあり、コンシューマーで発生した例外に基づくメッセージ処理が必要です。
スローされた例外を飲み込めないため、@Aroundも機能しません。
では、例外が発生したときに例外を傍受するにはどうすればよいですか? その伝播を無視します。
どんな返信でも大歓迎です。