Получить байты для класса, который был сгенерирован во время выполнения - PullRequest
5 голосов
/ 15 января 2010

Я работаю с платформой Java, которая генерирует некоторые (прокси) классы во время выполнения, используя пользовательский ClassLoader. Я хотел бы получить для любого такого класса, что пользовательский ClassLoader возвращает из loadClass (..) необработанный байтовый массив, который соответствует этому классу. Это возможно? Я знаю, что если класс существует как ресурс, то вы можете использовать входной поток для загрузки класса в двоичном формате, но как я могу это сделать, если класс генерируется во время выполнения?

Ответы [ 3 ]

3 голосов
/ 15 января 2010

Если вы замените пользовательский ClassLoader своим собственным, вы можете добавить некоторый механизм для сохранения необработанных байтов самостоятельно.

2 голосов
/ 21 мая 2010

Зарегистрируйте ClassFileTransformer . Вместо того, чтобы изменять байты, запишите необходимые данные.

0 голосов
/ 15 января 2010

Классы в ClassLoader создаются методом defineClass (). Если у вас уже есть собственный загрузчик классов, вы можете просто переопределить все методы defineClass (). В этот метод передается байт [], содержащий байты класса. Сохраните их, и вы сможете получить к ним доступ позже, если это необходимо для вашего приложения.

См. [DefineClass () Документация Java] [1] для получения дополнительной информации.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...