2009-10-31 5 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 и это потомки.

Затем вы можете использовать &&, чтобы иметь две точки в одном и том же аспекте.

Таким образом, вы можете иметь большую гибкость, если вам нужно использовать один из них в другом месте.

Я бы начал очень просто и использовал AJDT в Eclipse, чтобы отслеживать, на какие точки доступа влияют, чтобы иметь минимальный необходимый для получения того, что вы хотели.

Теперь у вас есть избыточность здесь, например !adviceexecution() и !cflow(adviceexecution), так как у вас есть cflow и выполнение повторяется в трех разных местах.

AJDT будет вашим другом здесь, так как трудно точно сказать, что вы можете исключить, например, хотите.

Храните его очень просто, чтобы избежать каких-либо нежелательных эффектов.

Смежные вопросы