Existe uma maneira de melhorar este pointcut?
Pergunta
Eu vim com o seguinte pointcut que eu uso para rastreamento de entrada método / saída. Não está quebrado e também faz o que eu quero, mas: 1- eu acho que parece desajeitada ou poderia ser mais elegante; e 2- Eu não sei se ele é à prova de balas.
// 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 * *(..) ));
Qualquer pensamento?
Solução
é muito mais complicado do que precisa ser.
Gostaria de dividi-la em duas partes:
- All chamadas de método de exceção toString ()
- All chamadas de método de exceção TI de descendentes @NotTraced e.
Você pode então usar um &&
ter os dois pointcuts no mesmo aspecto.
Desta forma, você pode ter mais flexibilidade, no caso de você precisa usar um desses em outro lugar.
Gostaria de começar muito simples, e usar AJDT em Eclipse, para monitorar o que joinpoints estão sendo afetados, para ter o mínimo necessário para obter o que queria.
Agora, parece que você tem redundância aqui, por exemplo !adviceexecution()
e !cflow(adviceexecution)
, como você tem cflow e execução repetida em três lugares diferentes.
AJDT será seu amigo aqui, já que é difícil dizer exatamente o que você pode estar excluindo que você quer, por exemplo.
Mantenha-o muito simples, para evitar quaisquer efeitos indesejados.