2

ポイントカットがタイプ ポイントカットである AspectJアドバイスがあります。handler

アドバイスしたい結合ポイントを含むメソッドは次のとおりです。

public void foo(String p1) {
    try {
        // some code
    }
    catch(Exception ex) {
        // more code    
    }
}

これが私の側面のコードです:

pointcut foopc(Exception ex) : handler(Exception) && args(ex) && withincode(public void foo(String));

before(Exception ex) : foopc(ex) {
    // advice body  
}

私が望むのは、変数をキャプチャしてp1、アドバイス本文内で使用することです (例外に加えてex)。これは可能ですか?もしそうなら、どうすればいいですか?

4

1 に答える 1

0

私はそれを理解したと信じています。誰かがより良い答えやより適切な方法を持っている場合、私はそれを受け入れます。

アスペクト内のコード:

pointcut fooExec(String p1) : 
    execution(public void foo(String)) && args(p1);

pointcut fooHandler(String p1, Exception ex) :
    cflow(fooExec(p1)) && handler(Exception) && args(ex)
    && withincode(public void foo(String));

before(String p1, Exception ex) : fooHandler(p1, ex) {
    // I can now use the variables p1 and ex.
}

編集:

execution内のシグネチャは単に である可能性が* *(String)あり、2 つのポイントカットは次のように 1 つに結合される可能性があることを指摘しておく必要があります。

pointcut fooHandler(String p1, Exception ex) :
    cflow(execution(* *(String) && args(p1))) 
    && handler(Exception) && args(ex)
    && withincode(public void foo(String));
于 2012-05-17T17:55:03.467 に答える