【问题标题】:Runtime class override with ByteBuddy使用 ByteBuddy 覆盖运行时类
【发布时间】:2023-03-09 23:39:01
【问题描述】:

我创建了一个基于 java.io.File 的自定义文件,因此我有:

class CloudFile extends java.io.File {}

ByteBuddy 是否有可能(在运行时)能够替换对类 java.io.File 的所有调用并伪装它与新的CloudFile

因此,例如,我创建了一个应用程序,该应用程序使用了一个广泛使用 java.io.File 的库,我想要的是该库对我的应用程序中 File 类的任何调用都是对 CloudFile 的调用

或者,一个更合理的解决方案,使用 ByteBuddy 创建一个将覆盖 java.io.File 的类加载器——问题是正确的做法是什么?

【问题讨论】:

    标签: java byte-buddy


    【解决方案1】:

    您可以使用 Byte Buddy 允许使用 AgentBuilder 构建的 Java 代理重新定义类。然后,您可以指示它重新定义所有库代码,在其中将构造函数调用替换为 File 为您的 CloudFile,我假设它对相关方法具有虚拟覆盖。

    为了替换构造函数,创建一个注册了 MemberSubstitution 的转换器,其中构造函数被切换。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多