Gibt es in Java eine Möglichkeit (zur Laufzeit), den Bytecode zu erhalten, der eine bestimmte Klasse definiert hat?Gibt es eine Möglichkeit, den Bytecode für eine Klasse zur Laufzeit zu erhalten?
Oder anders gesagt, gibt es eine Möglichkeit, das byte[]
Array zu ClassLoader.defineClass(String name, byte[] b, int off, int len)
übergeben, wenn eine bestimmte Klasse geladen wurde? Ich sehe, dass diese Methode final
deklariert wird, so dass das Erstellen einer benutzerdefinierten ClassLoader
zum Abfangen von Klassendefinitionen scheint nicht in Frage.
In der Vergangenheit habe ich die Klasse ClassLoader
der Klasse verwendet, um den Bytecode über die getResourceAsStream(String)
Methode zu erhalten, aber ich würde eine kanonische Lösung bevorzugen.
Warum
getResourceAsStream(String)
nicht kanonisch zu implementieren? – Riduidel@Riduidel: Nicht alle Klassenlader setzen den Bytecode als Ressource frei. Zum Beispiel erzeugen einige Ladeprogramme für benutzerdefinierte Klassen den Bytecode * on the fly * und geben sie nicht zurück, wenn 'getResourceAsStream' aufgerufen wird. –
Das könnte eine dumme Frage sein, aber warum müssen Sie die Byte-Codes für eine bestimmte Klasse bekommen? Vermutlich möchten Sie getResourceAsStream nicht verwenden, da einige Klassen möglicherweise von einem anderen Klassenlader geladen werden? – Geoff