Есть ли способ улучшить этот pointcut?

Я придумал следующий 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. Все вызовы метода исключение toString()
  2. Все методы вызывают исключение @NotTraced и его потомков.

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

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

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

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

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

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

Другие вопросы по тегам