2016-04-14 4 views
0

Für Instrumentierung in Java, warum java.lang.instrument ist gegenüber AspectJ obwohl beide die Aufgabe der Instrumentierung gleichermaßen. Gibt es einen bestimmten Vorteil der Verwendung von java.lang.instrument? Vielen Dank im Voraus ...java.lang.instrument vs AspectJ

+0

AspectJ ist nicht eingebaut? – chrylis

+0

Es ist Plugin-Bibliothek für Eclipse – FAZ

Antwort

3

Das sind zwei völlig verschiedene Dinge. Die API Instrumentation bietet einen Einstieg in die JVM-Laufzeit, die es Java-Agenten ermöglicht, auf erweiterte Funktionen der JVM zuzugreifen. Es bietet auch einen Haken beim Laden der JVM-Klasse, wo ein Agent benachrichtigt werden kann, wenn eine Klasse geladen wird, und seine Klassendatei neu definiert. Ähnlich ist es möglich, bereits geladene Klassen neu zu definieren.

AspectJ ist eine Bibliothek, die eine umfassendere Sicht auf die Neudefinition vorhandener Klassen bietet. Es funktioniert mit Punktausschnitten und Join-Punkten, um zu erklären, wie eine Klasse neu definiert werden sollte. Die Neudefinition durch AspectJ wird dann entweder zur Kompilierungszeit mit Hilfe eines Werkzeugs wie Maven angewendet oder AspectJ kann ein Java-Alter und die Instrumentierungs-API verwenden, um die Neudefinition von Klassen zur Laufzeit anzuwenden.

1

Da AspectJAOP Implementierung mit Byte-Code-Manipulation ist es besser, AOP-Framewors zu vergleichen. Z.B. AspectJ vs Spring AOP. java.lang.instrument ist kein AOP-Framework.

+0

Nicht der beste Vergleich entweder als Spring AOP baut auf AspectJ. –

+0

@RafaelWinterhalter Es ist nicht absolut richtig. Spring hat einige AspectJ-Unterstützung, aber der Hauptansatz ist [proxybasiert] (http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-introduction-proxies) . –

+0

Was ich meine ist, dass Spring High-Level-Codegenerierung bietet, die auf Low-Level-Lösungen wie AspectJ baut, die die Instrumentierungs-API nutzen. Der Frühling ist sozusagen eine Stufe höher in der Pyramide. –