2016-04-06 5 views
1

Was ist der Hauptzweck des Transformers in der Java-Instrumentierung. Ich weiß, dass sie mit der Instanz der Instrumentierung hinzugefügt werden müssen. Auch in der premain Methode, welche Parameter zugeordnet sind agentArgs in public static void premain(String agentArgs, Instrumentation inst);Transformator in Java-Instrumentierung

Antwort

1

Transformers (java.lang.instrument.ClassFileTransformer) werden verwendet, um Klassendateien auf Byte-Code-Ebene transformiert, bevor sie in die Java Virtual Machine geladen werden. Diese Funktion kann verwendet werden, um die Methoden auf Byte-Ebene zu modifizieren (wirklich, erhalten Sie ein Byte-Array) oder mit einer Drittanbieter-Bibliothek wie Javassist oder ASM wo Javessist auf einer höheren Modifikationsschicht ist (Sie können Quellcode zur Verfügung stellen, der kompiliert wird) während der Laufzeit). ASM arbeitet mit den Bytecode-Schlüsselwörtern (d.h. invokevirtual).

Das Ändern der Klassen und ihrer Einträge während der Ladezeit wird in gängigen Frameworks wie AspectJ verwendet, um die Möglichkeit zu bieten, Aspekte zu laden (das nennt man "Ladezeit-Weben").


Der agentArgs Parameter im premain(...) Methode ist ein String die Parameter enthalten, dass dort, wo an den Agenten beim Start gegeben. Es ist eine einzelne String, die vom Agenten selbst analysiert werden soll.

Sie können eine für den Agenten wie folgt liefern:

$ java -javaagent:${jarfile}=${agentArgs} 

Der Wert, den Sie als ${agentArgs} eingeben, wird der Wert des agentArgs Parameter sein.

Warum heißt es args, wenn es nur ein Argument enthält? Das weiß nur Gott.

+0

Vielen Dank für die Antwort. Könnten Sie mir bitte sagen, was AgentArgs enthalten würde? Ich meine den String-Wert davon – FAZ

+0

@FAZ Ich habe meine Antwort aktualisiert, um es klar zu machen. Der Wert, den Sie bei '$ {agentArgs}' angeben, ist der Wert des Parameters 'agentArgs'. –