Есть ли способ улучшить этот pointcut? - PullRequest
1 голос
/ 01 ноября 2009

Я придумал следующий pointcut, который я использую для отслеживания входа / выхода метода. Это не сломано и также делает то, что я хочу, но: 1 - я нахожу это неуклюжим или могло бы быть более изящным; и 2- я не знаю, пуленепробиваемый.

// 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 голос
/ 01 ноября 2009

Это гораздо сложнее, чем нужно.

Я бы разделил его на две части:

  1. Исключение всех вызовов методов ToString ()
  2. Исключение всех вызовов методов @NotTraced и его потомки.

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

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

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

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

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

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

...