可以使用java Instrumentation在运行时更改静态方法吗?

时间:2017-01-09 17:46:46

标签: java instrumentation

我需要更改第三方库中的静态方法。我已经完成了转换实例方法但不确定同样的事情适用于静态方法。

我在MyClass.java中有几个名为myMethod的静态方法。我需要在运行时更改myMethod的实现。 基本上我扩展了ClassFileTransformer并覆盖了像下面这样的byte []变换方法。这适用于例如方法,但我不确定我是否可以对静态方法做同样的事情。

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

}

1 个答案:

答案 0 :(得分:0)

是的,当然这是可能的。您可以更改整个类文件。对于大多数VM,您只能更改方法的实现,而不能更改其签名。如果方法是静态的,则无关紧要。