Also habe ich angefangen, mit AspectJ zu arbeiten, um Verarbeitungsereignisse zu behandeln, wenn sich der Zustand eines Objekts in meiner Domäne ändert.Neuling, der mit AspectJ arbeitet: Ich kann den Aspekt nicht aufrufen
Effektiv möchte ich einen Ratschlag schreiben, der alle Setter-Methoden in meiner Domäne umschließt. Wenn der Advice aufgerufen wird, überprüft er den Anfangswert des eingestellten Feldes, führt den Setter aus und überprüft den Wert, nachdem der Setter ausgeführt wurde. Wenn sich der Wert ändert, löst er ein Ereignis für einen Ereignis-Listener aus und informiert über die Änderung.
Ich habe das Tutorial hier gefunden: http://www.andrewewhite.net/wordpress/2010/03/17/aspectj-annotation-tutorial/, aber ich bin nicht in der Lage, irgendwelche Ratschläge zu erhalten. Beachten Sie, dass ich nur die LTW-Methode zum Verflechten meiner Empfehlung verwende, ich schreibe keinen Rat mit der AspectJ-Sprache und vorkompiliere sie.
Mein aop.xml (in META-INF für meine Testsuite) sieht wie folgt aus:
<aspectj> <aspects> <aspect name="domain.aop.TestAspect"/> </aspects> </aspectj>
Die Aspect-Klasse, die ich wie folgt aussieht erstellt haben:
package domain.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public class TestAspect { @Around("call(* domain.*.set*(..))") public void aroundSetMethods (JoinPoint jp) { System.out.println ("aroundSetMethod called"); } }
Wenn Ich führe meinen Testfall aus, ich kann sehen (durch Setzen eines Haltepunkts), dass eine Methode (domain.Error.setTask()) aufgerufen wird. Es ist meine Überzeugung, dass dies meinen Ratschlag auslösen sollte, aber ich komme nie in die Beratungsmethode.
Irgendwelche Hinweise darauf, was ich hier falsch mache?
Danke
Das ist es. Ich hatte den Eindruck, dass die @Around Annotation ausreichend war, um den Weber zu bestimmen, welche Klassen instrumentiert werden sollten. Anscheinend gab es nur ein bisschen mehr Konfiguration zu tun. Vielen Dank... – Steve