运行时 class 用 ByteBuddy 覆盖

Runtime class override with ByteBuddy

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

class CloudFile extends java.io.File {}

ByteBuddy 是否有可能(在运行时)能够将对 class java.io.Filemasquerade 的所有调用替换为新的 CloudFile

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

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

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

为了替换构造函数,创建一个转换器,在其中注册一个 MemberSubstitution 构造函数被关闭的位置。