是否可以使用javassist代理或替换静态方法

时间:2016-10-25 20:09:59

标签: java javassist

我尝试了各种方法,但一直无法使用。我也无法找到明确的答案。

如果可能,可以通过一个简单的例子来理解

1 个答案:

答案 0 :(得分:2)

是的,您当然可以替换任何静态方法的主体。这是最常见的用例之一:

ClassPool cp = new ClassPool(true);
CtClass ctClass = cp.get("com.acme.Foo");
CtMethod ctMethod = ctClass.getDeclaredMethod("bar");
ctMethod.setBody("{ }");
ctClass.toClass();

您不能做的是使用与Java代理调用处理程序类似的代理实用程序来执行此操作。后一个实用程序依赖于虚拟覆盖,它不允许处理静态方法。