3
我想用Javassist来测试一个Java不在我控制范围内的Java类(Java 1.6.0_26-b03,Javassist 3.16.1-GA)。使用Javassist来检测父类的私有方法?
我对Javassist比较陌生,但认为我知道背后的概念。我读了很多,但也许我错过了一些东西。请参阅下面的,很简单的代码:
文件ParentPrivateMethodInstrumentingTest.java:
package test.javassist;
import javassist.*;
public class ParentPrivateMethodInstrumentingTest
{
public ParentPrivateMethodInstrumentingTest() throws Exception
{
ClassPool classPool = ClassPool.getDefault();
CtClass childCtClass = classPool.get("test.javassist.Child");
CtMethod parentCtMethod = childCtClass.getMethod("parent", "()V");
parentCtMethod.insertBefore("{ System.err.println(\"-- before parent() --\"); }");
Child child = (Child)childCtClass.toClass().newInstance();
child.parent();
}
public static void main(String[] args) throws Exception
{
new ParentPrivateMethodInstrumentingTest();
}
}
文件Parent.java:
package test.javassist;
public class Parent
{
private void privateParent()
{
System.out.println("Parent.privateParent()");
}
public void parent()
{
System.out.println("Parent.parent()");
privateParent();
}
}
文件Child.java:
package test.javassist;
public class Child extends Parent
{
}
当我运行这个程序时,输出是:
Parent.parent()
Parent.privateParent()
所以我的问题是,为什么没有行“ - 之前父() - ”,我认为已插入字节码?
是不是可以做我尝试过的父类的私有方法的代码插入?
非常感谢您的帮助!
@它是Leto:请编辑并放置您的最终完整版本。它将作为一个很好的参考 – Jayan 2012-04-16 12:54:27