0

私は AspectJ を使用して、パッケージ org.apache.http、org.apache.http.entity、org.apache.http.impl、org.apache.http.io などのクラスのメソッドにアスペクトを適用しています。

以下のようにアスペクトを使用しましたが、適用されません。

public pointcut capturehttp():within(org.apache.http..*) && (call(public * *(..)) || call(private * *(..)));
after():capturehttp()
{

    System.out.println("In test test test testy test http method set");

}

複数のパッケージを指定するために Aspectj の側面で提案されているようにも試しましたが、うまくいきませんでした。私が間違っているところを教えてください。

4

1 に答える 1

0

次のアスペクトを使用します。

public aspect HttpCoreAspect {

    pointcut captureHttp(): within(com.my.pckg..*) && !within(HttpCoreAspect) 
        && (call(* org.apache.http..*.*(..)) || call(org.apache.http..*.new(..)));

    after(): captureHttp() {
        System.out.println("Apache HttpCore was invoked");
    }

}

上記のポイントカットは、アスペクト自体から行われた呼び出しを除いて、パッケージまたはそのサブパッケージ内の任意のコードから呼び出されcaptureHttp()た、パッケージまたは任意のサブパッケージ内の任意の型へのメソッドまたはコンストラクター呼び出しをキャプチャします (あなたのアドバイスから HttpCore を呼び出す場合は、無限再帰が発生することを望まない)。org.apache.httpcom.my.pckgHttpCodeAspectafter()

于 2016-06-29T12:28:00.420 に答える