2010-01-15 9 views
5

Estoy trabajando con un framework Java que genera algunas clases (proxy) en tiempo de ejecución, usando un ClassLoader personalizado. Me gustaría obtener para cualquier clase que el ClassLoader personalizado devuelva de loadClass (..) la matriz de bytes sin formato que corresponde a esta clase. es posible? Sé que si una clase existe como un recurso, entonces puede usar una secuencia de entrada para cargar la clase en formato binario, pero ¿cómo puedo hacerlo si la clase se genera en tiempo de ejecución?Obtener bytes para una clase que se generó en el tiempo de ejecución

+0

¿No tiene acceso a la fuente del cargador de clases personalizado? – stacker

Respuesta

2

Registrar una ClassFileTransformer. En lugar de modificar los bytes, registre los datos que necesita.

+1

Sí, en realidad terminamos haciendo eso hace unas semanas. Funciona. – user66237

3

Si reemplaza el ClassLoader personalizado con el suyo, puede agregar algún mecanismo para guardar los bytes sin procesar usted mismo.

0

Las clases en el Cargador de clases se crean mediante el método defineClass(). Si ya tiene un cargador de clases personalizado, puede simplemente anular todos los métodos defineClass(). A ese método se le pasa un byte [] que contiene los bytes de la clase. Almacene estos y puede acceder a ellos más tarde, sin embargo, para su aplicación.

Consulte [defineClass() documentación de Java] [1] para obtener más información.

[1]: http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html#defineClass(java.lang.String, byte [], int, int)

+0

Todos los métodos defineClass son finales. –

Cuestiones relacionadas