javaassist和cglib之间的区别

use*_*405 5 java proxy hibernate cglib javassist

我学习了hibernate,我明白hibernate已经停止使用cglib并切换到javaassist.

我也明白javaassist和cglib用于代理生成.

所以我想知道这两个如何运作,哪个更好?他们的工作风格有什么区别?

Raf*_*ter 5

Cglib不再被主动维护,图书馆的开发人员甚至不会应用提供的补丁:https://jaxenter.com/hibernate-to-deprecate-cglib-as-bytecode-provider-102106.html

此外,javassist提供了一个用于修改类的API,而不仅仅是为了对它们进行子类化.这些API还允许字节代码级操作,而cglib仅允许多个硬编码拦截.

最后,性能差异很小.有关概述,请参阅此表,其中包含我创建的第三个字节代码操作框架Byte Buddy:http://bytebuddy.net/#/tutorial

  • 有较新版本的 CGLIB https://github.com/cglib/cglib/releases SpringBoot 版本 1.5 也使用 CGLIB (2认同)