16

ある種の例外をスローするメソッドがあるとしましょう。例外をスローするコードは、外部サービスにアクセスするサードパーティ ライブラリにあります。外部サービスで多くの作業を行ういくつかのクラスがあり、潜在的な問題に対処するために全体に多くの例外処理があります。私が直面している問題は、多くの例外がある可能性があることですが、いくつかのアクションのうちの 1 つを実行するだけでよい場合があります。例外のタイプが関係ない場合や、異なるメソッドが同じタイプの例外をスローする場合もありますが、例外をスローするメソッドに応じて異なるアクションを実行する必要があります。

私が探しているのは、try/catch に取って代わり、そのメソッドで例外が発生したときに実行する動作を単純に指示できる注釈です。Spring ApsectJ がこの種のことを実行できることは知っていますが、現在、新しい依存関係を簡単に追加したり、pom を変更して既存のものを調整したりすることはできません。そのため、カスタム アノテーションを使用してこれを実現できることを願っています。例えば:

@Catcher(action=SomeEnum.SOME_ACTION)
public void doSomething(ServiceObj obj) throws SomeException {
    ExternalService.makeThingsHappen(obj);
}

もちろん、別のクラスが例外を処理すると思います。さらに難しいのは、渡される ServiceObj も必要になることです。makeThingsHappen() が失敗した場合、追加のアクションを実行するために obj が必要になる場合があります。action 変数は、ハンドラー クラスに obj をどうするかを伝えます。

これは深刻な不正行為なしで行うことができますか、それとも存在しない可能性のある何かを望んでいますか?

4

2 に答える 2