Мне нужно добавить новый (на самом деле, переопределить существующий унаследованный) метод в скомпилированный класс Java. Я могу изменить метод в суперклассе, используя Instrumentation (#retransformClasses()
) и Javassist (#insertAfter()
). К сожалению, это изменит поведение всех подклассов этого суперкласса, но я хочу, чтобы был изменен только один конкретный класс.
Я вижу, что Javaassist имеет #addMethod()
функциональность (и она действительно работает), но как внедрить полученный байт-код в JVM?
Оба метода Java.Instrumentation #retransformClasses()
и #redefineClasses()
ясно говорят в javadocs:
... Переопределение не должно добавлять, удалять или переименовывать поля или методы ...