Javassistを使用して、ソースが管理できない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()
なぜ私はバイトコードに挿入されていると思う " - (親)の前に"という行がないのですか?
親クラスのプライベートメソッドで試したようにコードを挿入することはできませんか?
ありがとうございました!
@ It's Leto:最終的な完全版を編集してください。それは良い参照として動作します – Jayan