2

Guice のメソッド インターセプト機能を使用しています。私が知る必要があるのは、次の形式の複数のインターセプターを適切に実装する方法です。

this.bindInterceptor(Matchers.any(), Matchers.any(), new Interceptor1(), new Interceptor2());

具体的には、両方のインターセプターでproced()の呼び出しがある場合、何が起こるでしょうか? 傍受されたメソッドは 2 回呼び出されますか? それとも、最初のインターセプターのproced()が2番目のインターセプターを呼び出し、それがメソッドを呼び出すのでしょうか? それとも、1 つのインターセプターだけがproced() を持つ必要がありますか?

ありがとう

4

1 に答える 1

3

両方のインターセプターは を呼び出すことができます (そして呼び出す必要があります) proceed。このようにして、それらを独立した側面 (つまり、トランザクションとロギング) として使用できます。実際、外側のインターセプターからprocedureを呼び出さないと、次のインターセプターは起動しません。

メソッドインターセプターは、呼び出しの順序に基づいて、スタックのような方法で呼び出されbindInterceptorます。あなたの例では、次のようになります。

Interceptor1 entry
Interceptor1 proceed
  Interceptor2 entry
  Interceptor2 proceed
    Method
  Interceptor2 exit
Interceptor1 exit
于 2014-07-22T18:53:09.387 に答える