Wie instrumentiert man Java-Systemklassen?

8

Ich versuche, Systemklassen benutzerdefiniertes Verhalten hinzuzufügen (FileInputStream / FileOutputStream). Ich schrieb benutzerdefinierten ClassFileTransformer mit der folgenden Transformationsmethode:

%Vor%

Wenn ich ein Beispielprogramm starte:

%Vor%

Ich sehe, dass keine Systemklassen zur Transformation übergeben werden.

Gibt es eine Möglichkeit, Systemklassen zu ändern? Vielen Dank im Voraus!

    
dernasherbrezon 29.11.2010, 10:31
quelle

1 Antwort

9

Einige (nicht alle) Systemklassen sind bereits geladen, bevor die pre-main-Methode aufgerufen und Ihr ClassFileTransformer hinzugefügt wird. Wenn Sie diese Klassen ebenfalls transformieren möchten, können Sie nach dem Hinzufügen Ihres ClassFileTransformers etwas wie Instrumentation # retransformClasses (Instrumentation # getAllLoadedClasses ()) aufrufen. Beachten Sie, dass Sie Instrumentation # addTransformer (ClassFileTransformer, true) verwenden müssen, um anzugeben, dass Ihr Transformer die Rücktransformation von Klassen unterstützt.

    
jarnbjo 29.11.2010, 10:41
quelle

Tags und Links