2016-06-28 12 views
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 aspect for specifying multiple packagesで提案されているように、私も試してみましたが、それはうまくいきませんでした。 私が間違っている場所に私に提案してください?

+0

質問を編集して、何を達成しようとしているのかを明記してください。あなたのポイントカットは、実行中のコードが 'org.apache.http'パッケージ**で定義されているpublicメソッドまたはprivateメソッド**へのメソッド呼び出し結合ポイントをすべて選択します。 –

+0

org.apache.httpの下に異なるサブパッケージがあります。これらのパッケージのすべてのメソッドでaspectを適用したいと思います。私を助けてください。 – fanwer

+0

達成しようとしていることを尋ねることで、私はその答えを期待しています* "私のコードから' com.my.package'パッケージのすべてのメソッド呼び出しを 'org.apache.http'でコード化したい*。あなたの例は* "org.apache.httpからの呼び出しを任意のパッケージ" *の下のパブリックメソッドまたはプライベートメソッドにキャプチャすることです。私はこれがあなたが望むものではないと思うので、達成しようとしていることを正確に指定してください。 –

答えて

0

は、以下の態様を使用:上記captureHttp()ポイントカットはメソッドまたはコンストラクタを捕捉する

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"); 
    } 

} 

をパッケージcom.my.pckgまたはそのサブパッケージのいずれかの内の任意のコードから呼び出され、パッケージorg.apache.httpまたは任意のサブパッケージ内の任意のタイプの呼び出し、 (after()のアドバイスからHttpCoreを呼び出すと、無限の再帰が起きることは望ましくありません)という側面からの呼び出しは除きます。

+0

私はそれを得た。どうもありがとうございます。 – fanwer

+0

あなたの問題を解決した場合は、私の答えを受け入れてupvotingしてもよろしいですか? –

関連する問題