Можно ли использовать инструменты с javassist java core?Классы, загруженные загрузчиком классов начальной загрузки - PullRequest
7 голосов
/ 14 марта 2012

Я хочу добавить «insertBefore» в метод базового класса JDK 5.По какой-то причине это не работает.Вот пример кода:

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 Ответ

1 голос
/ 13 апреля 2012

Это плохая идея модифицировать базовые классы Java. Правильный способ использования Java Instrumentation API (начиная с Java 1.5).

...