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?

Foi útil?

Solução

é muito mais complicado do que precisa ser.

Gostaria de dividi-la em duas partes:

  1. All chamadas de método de exceção toString ()
  2. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top