运行时 class 用 ByteBuddy 覆盖
Runtime class override with ByteBuddy
我根据 java.io.File
创建了一个自定义文件,因此我有:
class CloudFile extends java.io.File {}
ByteBuddy 是否有可能(在运行时)能够将对 class java.io.File
和 masquerade 的所有调用替换为新的 CloudFile
因此,例如,我创建了一个应用程序,它使用了一个广泛使用 java.io.File
的库,我想要的是在我的应用程序中对该库的任何调用 File
class拨打 CloudFile
否则,一个更合理的解决方案是使用 ByteBuddy 创建一个将覆盖 java.io.File
的类加载器——问题是对此的正确做法是什么?
您可以使用 Byte Buddy 允许使用 AgentBuilder
构建的 Java 代理重新定义 类。然后你可以指示它重新定义你所有的库代码,你用你的 CloudFile
替换对 File
的构造函数调用,我假设它对有问题的方法有虚拟覆盖。
为了替换构造函数,创建一个转换器,在其中注册一个 MemberSubstitution
构造函数被关闭的位置。
我根据 java.io.File
创建了一个自定义文件,因此我有:
class CloudFile extends java.io.File {}
ByteBuddy 是否有可能(在运行时)能够将对 class java.io.File
和 masquerade 的所有调用替换为新的 CloudFile
因此,例如,我创建了一个应用程序,它使用了一个广泛使用 java.io.File
的库,我想要的是在我的应用程序中对该库的任何调用 File
class拨打 CloudFile
否则,一个更合理的解决方案是使用 ByteBuddy 创建一个将覆盖 java.io.File
的类加载器——问题是对此的正确做法是什么?
您可以使用 Byte Buddy 允许使用 AgentBuilder
构建的 Java 代理重新定义 类。然后你可以指示它重新定义你所有的库代码,你用你的 CloudFile
替换对 File
的构造函数调用,我假设它对有问题的方法有虚拟覆盖。
为了替换构造函数,创建一个转换器,在其中注册一个 MemberSubstitution
构造函数被关闭的位置。