2016-06-20 4 views
2

Я пытаюсь добавить некоторый код класса, который находится внутри баночки (Maven) и зависимые пакеты я делаю это следующим образом:Вводят код в метод с Javassist

ClassPool classPool = ClassPool.getDefault(); 

CtClass ctClass = classPool.get("xyz.abc.ClassInADependecy"); 

CtMethod method = ctClass.getDeclaredMethod("getSomeValue"); 

method.insertBefore("{ System.out.println(\"modified\"); }"); 

Я используя Spring, и приведенный выше код вызывается с использованием аннотации @Configuration.

Когда я вызываю метод getSomeValue ничего не печатается.

Можете ли вы помочь мне узнать, что я делаю неправильно?

спасибо.

ответ

0

Вы меняете реализацию только в том виде, в каком она представлена ​​в пуле типов Javassists. Вы должны убедиться, что класс также загружен соответствующим загрузчиком классов. Кроме того, это должно произойти до того, как класс будет загружен в первый раз, т. Е. До того, как приложение Spring загрузит этот класс.

Один из способов сделать это - манипулировать классом от Java-агента: https://docs.oracle.com/javase/7/docs/api/java/lang/instrument/package-summary.html

Смежные вопросы