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