2011-11-29 14 views
8

Guiceのメソッド呼び出しをインターセプトするメソッドインターセプタの順序を知る必要があることがあります。簡単な例のシナリオは、カスタム@Retryメソッドインターセプタで@Transactionalメソッドインターセプタを提供するguice-persistを使用することです。再試行インターセプタは、同じトランザクション内で再試行が実行されないようにトランザクションインターセプタの外部で実行する必要があります。Guiceのメソッドインターセプタの順序を定義する方法は?

Springでは、インターセプタのOrderedインターフェイスを使用して、トランザクションインターセプタが再試行インターセプタ内で実行されていることを確認できます。 Guiceで同じことを達成する方法はありますか?

答えて

15

guiceは、登録された順序でインターセプタを呼び出します。あなたは彼らにこのような何かを定義するのであれば:

bindInterceptor(any(), annotatedWith(Retry.class), retryInterceptor); 
bindInterceptor(any(), annotatedWith(Transactional.class), transactionalInterceptor); 

または

bindInterceptor(any(), annotatedWith(Retry.class), retryInterceptor, transactionalInterceptor); 

retryInterceptor

は​​前に実行されます。

同じモジュールに複数のモジュールがある場合、第1のモジュールのインターセプタは秒のモジュールのインターセプタより先に実行されます。

+0

非常に限定されたアプローチです。いくつかのインターセプタを設定するモジュールがあり、このモジュールをインストールし、モジュールによってインストールされたインターセプタの間に追加のインターセプタを設定する必要がある場合、それを行う方法はありません。 – BrunoJCM