Помогите разобраться с javassist!

166
07 мая 2017, 23:45

Делаю задание по созданию java-приложения. Стоит задача изменения метода (формулы расчета) без перекомпиляции приложения. После поиска в гугле понял, что можно решить проблему с помощью javassist. Но пока совершенно не получается изменить тело метода. Пока пробую на простом примере. Итак, класс, содержащий единственный метод, который хочу поменять

package ru.testScandJavaCafee.service;
public class Helper2 {
public String createList()
{
    System.out.println("++++");
    return "1000";
}
}

и класс, из которого меняю метод

package ru.testScandJavaCafee.controller;
import javassist.*;
import ru.testScandJavaCafee.service.Helper2;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * Created by 15 on 06.05.2017.
 */
public class Helper {
public static void main(String[] args) throws NotFoundException, CannotCompileException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, IOException, InstantiationException {
    Helper2 helper2 = new Helper2();
    String simple2 = helper2.createList();
    System.out.println(simple2);
    ClassPool pool = ClassPool.getDefault();
    CtClass cc = pool.get("ru.testScandJavaCafee.service.Helper2");
    CtMethod cm = cc.getMethod("createList","()Ljava/lang/String;" );
    cm.setBody( "{ System.out.println(\"----\"); return \"2222 \" ;}" );
    cc.writeFile();

    Method method1 = helper2.getClass().getMethod("createList");
    // Вызвать метод с помощью invoke - передать туда только объект
    String simple = (String)method1.invoke(helper2);
    System.out.println("Simple:" + simple);
}

}

После запуска получаю на выходе

++++
1000
++++
1000

помогите разобраться, почему не выводится измененный метод

READ ALSO
Как записать значение 65535 в short Java

Как записать значение 65535 в short Java

Доброго времени сутокВ книге "Java SE 8 Базовый Курс" К

218
Можно ли использовать объекты не через интерфейс и не нарушить OOD

Можно ли использовать объекты не через интерфейс и не нарушить OOD

Если объект класса (основного в файле) не имеет интерфейса и используется на прямую как часть состояния другого объекта, можно ли сказать...

165
HashMap в методы

HashMap в методы

Нужно вывести все значения HashMap hmap за ключом GroupНо в метод передается пустой hmap

221
Загрузка ресурсов из .jar файла

Загрузка ресурсов из .jar файла

У меня в проекте в папке с ресурсами лежит папка сxml файлами

251