2016-06-28 60 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'包中定義。 –

+0

org.apache.http下有不同的子包,我想在這些包的所有方法中應用方面。請幫助我。 – fanwer

+0

通過詢問你想達到的效果我在等待一個答案*「我想從我的代碼中包含'com.my.package'中的所有方法調用到'org.apache.http'中的代碼」 *。你的例子是關於*「捕獲從'org.apache.http'到任何包下的任何公共或私有方法的調用」*。我懷疑這不是你想要的,所以請具體說明你想達到的目標。 –

回答

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()切入點將捕獲方法或構造在包org.apache.http或任何的子包調用的任何類型,包com.my.pckg或任何其子包內的任何代碼調用,不包括HttpCodeAspect本身的調用(如果您碰巧從您的after()建議中調用HttpCore,我們不希望發生無限遞歸)。

+0

我明白了。非常感謝。 – fanwer

+0

如果解決了您的問題,您是否願意接受並提高我的答案? –