7

コアJDK5クラスのメソッドに「insertBefore」を追加したいと思います。何らかの理由で機能していません。コードの例を次に示します。

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クラスを強制的に実行するコードを実行しましたが、挿入したコードは実行されません。私はこれを自分のクラスでしか機能させることができません。このコードは、単純なスタンドアロンアプリとして実行されています。

何か案は?

4

1 に答える 1

1

Java コア クラスを変更することはお勧めできません。Java Instrumentation API を使用する正しい方法 (Java 1.5 以降)。

于 2012-04-13T10:01:48.947 に答える