In Java, esiste un modo (in fase di esecuzione) per ottenere il bytecode che ha definito una particolare classe?C'è un modo per ottenere il bytecode per una classe in fase di esecuzione?
In un altro modo, c'è un modo per ottenere l'array byte[]
passato a ClassLoader.defineClass(String name, byte[] b, int off, int len)
quando una particolare classe è stata caricata? Vedo che questo metodo è dichiarato final
, quindi la creazione di un codice personalizzato ClassLoader
per intercettare le definizioni di classe sembra fuori questione.
In passato, ho utilizzato il codice ClassLoader
della classe per ottenere il bytecode tramite il metodo getResourceAsStream(String)
, ma preferirei una soluzione più canonica.
Perché non è
getResourceAsStream(String)
canonica? – Riduidel@Riduidel: non tutti i programmi di caricamento classi espongono il bytecode come risorsa. Ad esempio, alcuni programmi di caricamento classe personalizzati generano bytecode * al volo * e non si preoccupano di restituirlo quando viene chiamato 'getResourceAsStream'. –
Questa potrebbe essere una domanda stupida, ma perché è necessario ottenere i codici byte per una determinata classe? Presumibilmente non si desidera utilizzare getResourceAsStream perché alcune classi potrebbero essere caricate da un altro classloader? – Geoff