разница между javaassist и cglib

Я изучаю спящий режим и понял, что спящий режим перестал использовать cglib и переключился на javaassist.

Еще я понял, что для генерации прокси используются javaassist и cglib.

поэтому мне было интересно, как эти два работают и какой из них лучше? В чем разница между их стилем работы?


person user3359405    schedule 05.09.2015    source источник


Ответы (1)


Cglib больше не поддерживается активно, и разработчики библиотеки даже не будут применять предоставленные исправления: https://jaxenter.com/hibernate-to-deprecate-cglib-as-bytecode-provider-102106.html

Кроме того, javassist предлагает API для изменения классов, а не только для создания их подклассов. Эти API также позволяют манипулировать на уровне байтового кода, в то время как cglib допускает только несколько жестко запрограммированных перехватов.

Наконец, есть небольшая разница в производительности. Для обзора см. Эту таблицу о созданном мной фреймворке для работы с третьим байтовым кодом, Byte Buddy: http://bytebuddy.net/#/tutorial

person Rafael Winterhalter    schedule 05.09.2015
comment
Существуют более новые выпуски CGLIB github.com/cglib/cglib/releases Также SpringBoot версии 1.5 использует CGLIB - person Yan Khonski; 05.06.2018
comment
В этих выпусках применяются исправления, позволяющие запускать cglib на новых JVM, что требует немало хаков, но при этом не добавлены функции или изменены API. По этой причине, например, в настоящее время он не работает на Java 13. - person Rafael Winterhalter; 10.06.2019