Frage

Ich habe mit dem folgenden pointcut kommen, die ich für Tracing-Verfahren Entry / Exit verwenden. Es ist nicht gebrochen und auch das tut, was ich will, aber: 1- Ich finde es ungeschickt aussieht oder könnte mehr elegant; und 2- Ich weiß nicht, ob es kugelsicher ist.

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

Alle Gedanken?

War es hilfreich?

Lösung

Es ist viel komplizierter, als es sein muss.

Ich würde es in zwei Teile aufgeteilt:

  1. Alle Methodenaufrufe Ausnahme toString ()
  2. Alle Methodenaufrufe Ausnahme @NotTraced und es ist Abkömmlinge.

Sie können dann eine && verwenden die beiden pointcuts im gleichen Aspekt zu haben.

Auf diese Weise können Sie mehr Flexibilität haben, auf, falls Sie eines dieser an anderer Stelle verwenden.

Ich würde sehr einfach beginnen, und verwenden Sie AJDT in Eclipse, zu überwachen, was joinpoints betroffen sind, das Minimum benötigt, um zu bekommen, was Sie wollten.

Nun, es scheint, dass Sie Redundanz haben hier zum Beispiel !adviceexecution() und !cflow(adviceexecution), wie Sie cflow und Ausführung wiederholt in drei verschiedenen Orten haben.

AJDT wird Ihr Freund hier, wie es genau schwer zu sagen ist, was Sie ohne sein können, dass Sie möchten, zum Beispiel.

Halten Sie es sehr einfach, alle unerwünschten Effekte zu vermeiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top