Замена вызова метода в классе во время выполнения
Эта проблема
Я использую фитнес для запуска некоторых автоматических тестов. Есть класс TableTable, который, если его усовершенствовать, позволит мне сделать несколько классных вещей. Что мне нужно сделать, это изменить то, что метод appendInstructions()
этого класса делает.
Поскольку fitnesse явно ищет класс TableTable, я не могу просто создать дочерний класс TableTable с моими необходимыми усовершенствованиями - я не могу заставить fitnesse находить и использовать свой собственный дочерний класс.
Мое текущее решение
Временное решение, которое я принял, заключается в том, что я позаимствовал исходный код TableTable, добавил его в свое исходное дерево в том же пакете, что и в jar-файле fitnesse, и изменил его код в соответствии с моими потребностями. Файлы классов моего кода появляются перед файлом fitnesse в пути к классам, поэтому мои изменения принимаются.
Что я пытаюсь сделать
Вместо того, чтобы полностью скрывать класс TableTable в банке fitnesse, я хочу переписать только один метод этого класса во время выполнения. Поможет ли какая-либо библиотека генерации кода (например, cglib) переписать класс во время выполнения и поможет мне достичь этого?
2 ответа
В зависимости от того, насколько обширными должны быть изменения, вы можете использовать Javassist для изменения тела рассматриваемого метода. Здесь есть учебник по перехвату / замене методов с использованием Javassist.