2016-06-28 12 views
0

AspectJ를 사용하여 패키지 org.apache.http, org.apache.http.entity, org.apache.http.impl, org.apache.http에있는 클래스 메소드에 aspect를 적용하고 있습니다. 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

질문을 편집하여 무엇을 달성하고자하는지 지정하십시오. 당신의 pointcut은 실행 코드가'org.apache.http' 패키지에 정의되어있는 public 또는 private 메소드 **에 대한 모든 메소드 호출 join point를 선택합니다 **. –

+0

org.apache.http 아래에 다른 하위 패키지가 있으며이 패키지의 모든 메소드에서 aspect를 적용하고자합니다. 제발 도와주세요. – 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() 포인트 컷은 메서드 나 생성자가 패키지 com.my.pckg 또는 그 서브 패키지의 내의 모든 코드에서 호출, 패키지 org.apache.http 또는 하위 패키지에 모든 유형의 호출을 사로 잡을 것입니다, (after() 조언에서 HttpCore를 호출하면 무한 재귀가 일어나기를 원하지 않습니다.) HttpCodeAspect 측면에서 호출 된 호출은 제외합니다.

+0

알았어. 정말 고맙습니다. – fanwer

+0

문제를 해결 한 경우 내 대답을 수락하고 upvoting 하시겠습니까? –