【问题标题】:difference between javaassist and cglibjavaassist 和 cglib 的区别
【发布时间】:2015-09-05 12:14:21
【问题描述】:

我学习了hibernate,我知道hibernate已经停止使用cglib并切换到javaassist。

我也明白javaassist和cglib是用来生成代理的。

所以我想知道这两个是如何工作的,哪个更好? 他们的工作方式有什么不同?

【问题讨论】:

    标签: java hibernate proxy javassist cglib


    【解决方案1】:

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

    此外,javassist 提供了一个用于修改类的 API,而不仅仅是用于子类化。这些 API 还允许字节码级别的操作,而 cglib 只允许几个硬编码的拦截。

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

    【讨论】:

    • 有更新版本的 CGLIB github.com/cglib/cglib/releases SpringBoot 1.5 版也使用 CGLIB
    • 那些版本正在应用补丁以允许 cglib 在较新的 JVM 上运行,这需要相当多的 hack,但没有添加任何功能或更改 API。例如,由于这个原因,它目前不适用于 Java 13。
    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2013-08-07
    • 2011-10-20
    相关资源
    最近更新 更多