En Java, ¿hay alguna manera (en tiempo de ejecución) de obtener el bytecode que define una clase en particular?¿Hay alguna manera de obtener el bytecode para una clase en tiempo de ejecución?
Dicho de otra manera, ¿hay alguna manera de obtener la matriz byte[]
pasada al ClassLoader.defineClass(String name, byte[] b, int off, int len)
cuando se cargó una clase en particular? Veo que este método está declarado final
, por lo que la creación de un ClassLoader
personalizado para interceptar las definiciones de clase parece estar fuera de cuestión.
En el pasado, he usado la clase ClassLoader
para obtener el bytecode a través del método getResourceAsStream(String)
, pero preferiría una solución más canónica.
¿Por qué no
getResourceAsStream(String)
canónica? – Riduidel@Riduidel: No todos los cargadores de clases exponen el bytecode como un recurso. Por ejemplo, algunos cargadores de clases personalizadas generan bytecode * sobre la marcha * y no se molestan en devolverlo cuando se llama a 'getResourceAsStream'. –
Esto podría ser una pregunta tonta, pero ¿por qué necesitas obtener los códigos de bytes para una clase determinada? ¿Presumiblemente no desea utilizar getResourceAsStream porque algunas clases pueden ser cargadas por otro cargador de clases? – Geoff