2017-02-21 20 views
1

Я генерирую байт-код для двух общедоступных классов на основе одного входного класса в Java с помощью java-агента.Как я могу сгенерировать несколько открытых классов для одного файла класса в java с помощью java-агента

Теперь у меня уже есть два байтовых массива с байтовым кодом сгенерированных классов в них при функции преобразования в подклассе ClassFileTransformer. Как я могу напрямую загрузить их в JVM, не сохраняя их на дисковые файлы?

код выглядит следующим образом

public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, 
    ProtectionDomain protectionDomain, byte[] classfileBuffer) 
throws IllegalClassFormatException { 
    byte[] classOne = generateEhancedClass(className, classFileBuffer, loader); 
    byte[] classTwo = generateShadowClass(className, classFileBuffer,loader); 

    // TODO load both classOne and classTwo into loader 

} 

ответ

0

Вы не можете без фокусов. Поскольку у вас есть ClassLoader, вы можете позвонить по методу defineClass напрямую. Однако это требует отражения и больше невозможно в Java 9 без явного экспорта пакета java.lang.