2017-02-21 3 views
1

Je génère un bytecode pour deux classes publiques basées sur un fichier de classe d'entrée dans java en utilisant l'agent java.Comment générer plusieurs classes publiques pour un fichier de classe dans java en utilisant l'agent java

Maintenant, j'ai déjà deux tableaux d'octets avec le code d'octet des classes générées dans eux à la fonction de transformation dans une sous-classe de ClassFileTransformer. Comment puis-je les charger directement dans JVM sans les enregistrer sur des fichiers de disque?

code ressemble à ceci

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 

} 

Répondre

0

Vous ne pouvez pas sans tours. Comme vous avez le ClassLoader disponible, vous pouvez appeler la méthode defineClass directement. Cela nécessite toutefois une réflexion et n'est plus possible dans Java 9 sans exporter explicitement le package java.lang.