Замена вызова метода в классе во время выполнения

Проблема
Я использую Fitnesse для запуска некоторых автоматических тестов. Существует класс под названием TableTable, который, если его усовершенствовать, позволит мне делать некоторые интересные вещи. Что мне нужно сделать, так это изменить то, что делает метод appendInstructions() этого класса.

Поскольку Fitnesse явно ищет класс TableTable, я не могу просто создать дочерний класс TableTable с необходимыми улучшениями — я не могу заставить Fitnesse найти и использовать свой собственный дочерний класс.

Мое текущее решение
Временное решение, которое я принял, заключается в том, что я позаимствовал исходный код TableTable, добавил его в свое исходное дерево в том же пакете, что и в банке Fitnesse, и изменили его код в соответствии с моими потребностями. Файлы классов моего кода появляются перед банкой Fitnesse в пути к классам, поэтому мои изменения сохраняются.

Что я пытаюсь сделать
Вместо того, чтобы полностью скрывать класс TableTable в jar-файле Fitnesse, я хочу переписать только один метод этого класса во время выполнения. Поможет ли мне какая-либо библиотека генерации кода (например, cglib) переписать класс во время выполнения и достичь этого?


person jrharshath    schedule 15.03.2012    source источник
comment
Было бы здорово, если бы вы могли объяснить, что делают ваши улучшения, и поделиться ими с сообществом. Может быть, есть способ сделать то, что вы ищете, либо стандартным, либо дополнительным предложением.   -  person Dan Woodward    schedule 16.03.2012


Ответы (2)


В зависимости от того, насколько обширными должны быть изменения, вы можете использовать Javassist для изменить тело рассматриваемого метода. Учебник по перехвату/замене методов с помощью Javassist здесь.

person thkala    schedule 15.03.2012

Похоже, вам следует взглянуть на JRebel.

person aioobe    schedule 15.03.2012