Frage

Ich habe für eine Weile AspectJ benutzen und es funktioniert super auf Objekt Umfang Felder enthalten Anmerkungen. Ich lief in eine Situation, wo ich eine Variable des Verfahrens Umfang zu annotieren wollen, die mit meinem pointcut arbeiten, aber ich habe Probleme mit ihm.

Hier ist die pointcut, dass ich verwende. Es funktioniert gut, wenn meine Variable ein Feld für das Objekt ist, aber wenn ich den Umfang ein Verfahren (Variable in der Methode deklariert) reduzieren, dann funktioniert es nicht mehr, und ich bin nicht sicher, warum. Lassen Sie mich wissen, was ich tun kann, danke.

 after(final Trigger trigger): set(@Triggereable * *) && args(trigger)
 {
  System.out.println("trigger flush");
 }

Auch hier ist ein exmaple von dem, was ich arbeiten will. Das oben sollte System.out.printin feuern, wenn der Trigger-instanziiert:

public void foo()
{
   @Triggereable
   private Trigger trigger = new Trigger();
}
War es hilfreich?

Lösung

AspectJ zur Zeit nicht pointcuts auf lokale Variablen unterstützen (lesen Sie die FAQ Eintrag ).

Ich scheine eine aktuelle Diskussion über eine solche Funktion zu erinnern möglicherweise bald hinzugefügt, aber ich konnte es nicht in der tracker AspectJ Problem noch in der Mailing List Archive

Andere Tipps

Wenn Sie auf eine solche Situation kam, versuchen Sie wahrscheinlich Implementierung ändern anstelle der tatsächlichen Querschnittsthemen der Anwendung. Grundsätzlich ist es nicht das, was AOP und AspectJ soll für verwendet werden soll.

Als eine Arbeit um, können Sie entweder relevante Funktionen in ein separates Verfahren extrahieren und dann Aspekte diese Methode anwenden oder alternativ können Sie eine ganze Methode mit diesen lokalen Variablen ersetzen, um Rat mit.

Mehr über, in Ihrem speziellen Beispiel kann die pointcut innerhalb Tragweite einer bestimmten Methode an den Konstruktor Ausführung angewendet werden, so dass Sie ohne Bindung an eine lokale Variable praktisch das gleiche tun können.

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