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

时间:2012-03-14 14:31:25

标签: java bytecode instrumentation 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();

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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