2012-03-14 6 views
6

コアJDK 5クラスのメソッドに「insertBefore」を追加します。なんらかの理由でうまくいかない。ここでは、コードの例を示します。javassist Javaコアクラスで計測することは可能ですか?ブートストラップクラスローダーによってロードされるクラス

ClassPool pool = ClassPool.getDefault(); 
CtClass ctClass = pool.get("com.sun.org.apache.xerces.internal.impl.xs.XSMessageFormatter"); 
CtMethod ctMethod = ctClass.getDeclaredMethods()[0]; 
ctMethod.insertBefore("System.out.println(\"WORKED\");"); 
ctClass.toClass(); 

com.sun.org.apache.xerces.internal.impl.xs.XSMessageFormatterはJDKにバンドルされている、それはrt.jarの内側です。上のスニペットの後、私はXSMessageFormatterクラスを強制的に実行するいくつかのコードを実行しますが、挿入されたコードは決して実行されません。私は自分のクラスでしか動かすことができません。このコードは単純なスタンドアロンアプリとして実行されています。

アイデア?

答えて

1

Javaコアクラスを変更するのは悪い考えです。 Java Instrumentation API(Java 1.5以降)を使用する正しい方法。

関連する問題