Есть ли способ улучшить этот 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 ответ
Это гораздо сложнее, чем нужно.
Я бы разделил его на две части:
- Все вызовы метода исключение toString()
- Все методы вызывают исключение @NotTraced и его потомков.
Затем вы можете использовать &&
иметь две точки в одном и том же аспекте.
Таким образом, вы можете иметь больше гибкости, если вам нужно использовать один из них в другом месте.
Я бы начал очень просто и использовал AJDT в Eclipse, чтобы отслеживать, на какие точки соединения влияют, чтобы получить минимум, необходимый для получения того, что вы хотели.
Теперь, кажется, у вас есть избыточность здесь, например !adviceexecution()
а также !cflow(adviceexecution)
, так как у вас есть cflow и выполнение повторяется в трех разных местах.
AJDT будет вашим другом здесь, так как трудно точно сказать, что вы, возможно, исключаете, что вы хотите, например.
Держите это очень просто, чтобы избежать каких-либо нежелательных эффектов.