Эти библиотеки основаны на стандартных API Java, которые, конечно, вы также можете использовать самостоятельно без этих библиотек.
Прежде всего, файлы классов Java - это просто последовательности байтов в четко определенном формате, как указанов JVMS §4, Формат файла класса .Основная задача упомянутых библиотек - предоставить инструменты для обработки байтовых последовательностей в этом формате.Второе - получение определений существующих или экспортных модифицированных или вновь созданных классов.
Существует два разных способа решения второй задачи.Один из них - читать скомпилированные классы из постоянного хранилища, такого как файловые системы или файлы JAR и т. Д., И записывать их обратно в это хранилище, пока не выполняется конкретный код, как это делают инструменты сборки и развертывания.Это должно быть тривиально, поскольку сводится только к чтению и записи байтов.
Другой способ - манипулировать классами во время выполнения, что может быть выполнено агентами Java через API-интерфейс Instrumentation .Он предлагает механизмы для перехвата классов во время загрузки / определения перед их первым использованием, а также переопределение классов.Последний не может изменять их свободно, в настоящее время он должен сохранять все объявления полей и методов, поэтому его можно в основном использовать для изменения исполняемого кода методов.
Если вам нужны примеры для обработки файлов классовбез дополнительных сторонних библиотек есть ответы на Stackoverflow
Конечно, эти примерытолько одноцелевой код или наброски.Если вы расширите их до чего-то более общего или полезного, вскоре вы в конечном итоге будете в основном заново реализовывать эти библиотеки.