是否有可能使用javassist java核心类?bootstrap类加载器加载的类

Rod*_*igo 7 java instrumentation bytecode javassist

我想在核心JDK 5类的方法上添加"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();
Run Code Online (Sandbox Code Playgroud)

com.sun.org.apache.xerces.internal.impl.xs.XSMessageFormatter与JDK捆绑在一起,它位于rt.jar中.在上面的代码片段之后,我运行了一些强制XSMessageFormatter类运行的代码,但我插入的代码永远不会运行.我只能在自己的班级上工作.此代码作为一个简单的独立应用程序运行.

有任何想法吗?

小智 1

修改 java 核心类是个坏主意。使用 Java Instrumentation API 的正确方法(自 Java 1.5 起)。