I am working with a Java framework that generates some (proxy) classes at runtime, using a custom ClassLoader. I would like to get for any such class that the custom ClassLoader returns from loadClass(..) the raw byte array that corresponds to this class. Is this possible? I know that if a class exists as a resource then you can use an input stream to load the class in binary format but how can 开发者_JS百科I go about this if the class is generated at runtime?
If you replace the custom ClassLoader with your own, you can add some mechanism for saving the raw bytes yourself.
Register a ClassFileTransformer. Rather than modifying the bytes, record the data you need.
Classes in the ClassLoader are created by the defineClass() method. If you already have a custom classloader you can simply override all of the defineClass() methods. To that method you are passed a byte[] containing the bytes of the class. Store these and you can access them later however you need to for your application.
See [defineClass() Java Documentation][1] for more information.
[1]: http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html#defineClass(java.lang.String, byte[], int, int)
精彩评论