2009-10-31 3 views
1

나는 추적 메소드 입력/종료에 사용하는 다음 pointcut을 생각해 냈습니다. 그것은 부서지지 않고 또한 내가 원하는 것을 수행하지만 : 1- 나는 서투른 것처럼 보이거나 더 우아해질 수 있습니다. 2 방탄인지는 모르겠다.이 pointcut을 향상시킬 수있는 방법이 있습니까?

// tracing the execution of all methods except: 
// - toString and descendants 
// - methods identified with @NotTraced and descendants 
pointcut theMethod() : 
     within(*.*) && 
     !within(tracing.*) 
     && execution(* *(..)) 
     && !adviceexecution() 
     && !cflow(adviceexecution()) 
     && !execution(String *.toString()) 
     && !cflow(execution(String *.toString())) 
     && !execution(@NotTraced * *(..)) 
     && !cflow(execution(@NotTraced * *(..))); 

의견이 있으십니까?

답변

1

훨씬 복잡합니다.

나는 두 부분으로 분할 것 :

  1. 모든 방법은 예외를 toString()
  2. 모든 방법은 예외 @NotTraced를 호출하고 자손의를 호출합니다.

그런 다음 &&을 사용하여 동일한 지점에서 두 개의 pointcut을 사용할 수 있습니다.

이렇게하면 다른 곳에서 사용해야 할 경우에 대비해 유연성을 높일 수 있습니다.

매우 간단한 시작하고 이클립스에서 AJDT를 사용하여 영향을받는 joinpoint가 무엇인지 모니터링하고 원하는 것을 얻는 데 필요한 최소값을 갖게됩니다.

여기에 예를 들어 !adviceexecution()!cflow(adviceexecution)과 같이 중복성이있는 것처럼 보입니다. 세 가지 다른 위치에서 반복되는 cflow와 실행이 있기 때문입니다.

예를 들어, 내가 배제 할 수있는 것을 정확하게 말하기 어렵 기 때문에 AJDT가 귀하의 친구가 될 것입니다.

원하지 않는 영향을 피하려면 매우 단순하게 유지하십시오.

관련 문제