Ich versuche, ein Java-Programm so zu schreiben, dass nach dem Aufruf einer methodA () zuerst eine Methode mit dem Namen methodBeforeA () aufgerufen wird und dann methodA () wird ausgeführt, gefolgt von einer anderen Methode namens named, methodAfterA () . Das ist sehr ähnlich dem, was Junit mit Annotationen macht (mit @Before, @Test, @After), also denke ich, dass es möglich sein sollte, Reflektionen zu verwenden, aber ich habe keine sehr gute Ahnung.
AspectJ ermöglicht es Ihnen, Schnittpunkte vor dem Methodeneintrag festzulegen und nach dem Beenden der Methode.
In AspectJ selektieren Pointcuts bestimmte Join Points im Programmablauf. Zum Beispiel der Pointcut
%Vor%wählt jeden Join-Punkt aus, bei dem es sich um eine Methode mit der Signatur void
Point.setX(int)
handelt - alsoPoint
svoid setX
method mit einem einzelnenint
-Parameter.
Dies würde erfordern, den Methodencode zu ändern, um Aufrufe an die anderen Methoden einzufügen. Mit der Java-Reflektion können Sie eine Menge Dinge tun, aber Sie können den Methodencode nicht dynamisch ändern.
Was JUnit tut, ist anders. Er identifiziert jede mit @Before
, @Test
und @After
annotierte Methode und führt dann etwas aus:
Sie können sicherlich so etwas tun, um sicherzustellen, dass Sie die "Vorher" - und "Nachher" -Methoden aufrufen, nachdem Sie die betreffende Methode aufgerufen haben. Aber Sie können nicht alle Anrufer dazu zwingen, dasselbe zu tun.
Tags und Links java reflection annotations