0

私は Struts2 インターセプターを使用していました。コンテナーは、構成マネージャーを参照した後、関連するアクション クラスのアクション プロキシを作成します( struts.xml)。インターセプター チェーンを実行する時が来ました。簡単な質問がありMyinterceptorます。クラスでインターセプト メソッドを正確に呼び出すのは誰ですか。

public class MyInterceptor  implements Interceptor{

    public void destroy() {
        // TODO Auto-generated method stub

    }

    public void init() {
        // TODO Auto-generated method stub

    }

    public String intercept(ActionInvocation ai) throws Exception {
        // TODO Auto-generated method stub
        long t1=System.currentTimeMillis();

        ValueStack s= ai.getStack();
        String val=s.findString("name");
        s.set("name", val.toUpperCase()+"_changed");

        return ai.invoke();

    }

}

私の理解によると、対応するアクションクラスのアクションプロキシによって呼び出されます。同じ行で、proxyfactorybean がクラスのアドバイスを呼び出すために同様のことを行う Spring AOP で行われます (ポイントカット)。

しかし、これをサポートするドキュメントはありません。私が正しいかどうか教えてください。

4

3 に答える 3

0

インターセプトはintercept()、 interface のメソッドをオーバーライドする必要がありますInterceptor@Overrideメソッドにアノテーションを追加するだけです。

@Override
public String intercept(ActionInvocation ai) throws Exception {
   //your code
}
于 2015-06-11T11:27:22.877 に答える
0

method へのパラメーターとして取得していますintercept。インターセプト時に呼び出し元がすべてのインターセプター インスタンスに自分自身を渡すため、インターセプター インスタンスから広く離れる必要はありません。

このメソッドが呼び出される場所はDefaultActionInvocation

public class DefaultActionInvocation extends Object implements ActionInvocation

デフォルトの ActionInvocation の実装

于 2015-03-07T21:47:10.597 に答える
0

ActionInvocation クラス

  1. フレームワークはまず ActionInvocation の invoke() メソッドを呼び出して Action の実行を開始します。

  2. ActionInvocaton は、スタック内の最初のインターセプターを実行することによって呼び出しプロセスを開始します。

于 2015-03-09T10:12:24.810 に答える