2017-01-09 2 views
2

J'ai besoin de changer les méthodes statiques dans les bibliothèques tierces. J'ai fait la méthode de transformation d'instance mais je ne suis pas sûr que la même chose s'applique aux méthodes statiques.Vous pouvez modifier les méthodes statiques à l'exécution en utilisant java Instrumentation?

J'ai plusieurs méthodes statiques appelées myMethod dans MyClass.java. J'ai besoin de changer l'implémentation de myMethod pendant l'exécution. Fondamentalement, j'ai étendu ClassFileTransformer et override byte [] transformer la méthode quelque chose comme ci-dessous. Cela a fonctionné par exemple des méthodes mais je ne suis pas sûr si je peux faire la même chose pour les méthodes statiques.

@Override 
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, 
         ProtectionDomain protectionDomain, byte[] classfileBuffer) 
    throws IllegalClassFormatException { 

} 

Répondre

0

Oui, bien sûr, cela est possible. Vous pouvez changer le fichier de classe entier. Pour la plupart des machines virtuelles, vous ne pouvez modifier que l'implémentation de la méthode mais pas sa signature. Si une méthode est statique ou non, cela n'a pas d'importance.