2009-10-31 2 views
1

Je suis venu avec le pointcut suivant que j'utilise pour l'entrée/sortie de méthode de suivi. Ce n'est pas cassé et fait aussi ce que je veux mais: 1- Je trouve que ça a l'air maladroit ou pourrait être plus élégant; et 2- je ne sais pas si c'est à l'épreuve des balles.Y at-il un moyen d'améliorer ce pointcut?

// 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 * *(..))); 

Des pensées?

Répondre

1

C'est beaucoup plus compliqué que nécessaire.

Je le diviser en deux parties:

  1. Tous les appels de méthode exception toString()
  2. Tous les appels de méthode exception @NotTraced et il est des descendants.

Vous pouvez ensuite utiliser un && pour avoir les deux coupes de point dans le même aspect. De cette façon, vous pouvez avoir plus de flexibilité, au cas où vous auriez besoin d'utiliser l'un d'entre eux ailleurs.

Je commencerai très simplement, et j'utiliserai AJDT dans Eclipse, pour surveiller les points de jointure qui sont affectés, pour avoir le minimum nécessaire pour obtenir ce que vous vouliez.

Maintenant, il semble que vous ayez une redondance ici, par exemple !adviceexecution() et !cflow(adviceexecution), car cflow et l'exécution sont répétés à trois endroits différents.

AJDT sera votre ami ici, car il est difficile de dire exactement ce que vous pouvez exclure que vous voulez, par exemple. Restez très simple, pour éviter tout effet indésirable.

Questions connexes