当前位置: 首页 > 知识库问答 >
问题:

无法使用ByteBuddy重新定义“java.io.ObjectInputStream”?

张敏达
2023-03-14

无法使用ByteBuddy重新定义java.io.ObjectInputStream。

我已经尝试了很多方法来解决这个问题。但我找不到钩住“java.io.ObjectInputStream$resolveClass”的方法。你能帮助我吗?

new AgentBuilder.Default()
//                .ignore(none())
                .type(named("java.io.ObjectInputStream"))
                .transform((builder, typeDescription, classLoader,module) ->
                        builder.method(named("resolveClass"))
                                .intercept(MethodDelegation.to(TimerAdvice.class)))
                .with(AgentBuilder.Listener.StreamWriting.toSystemOut())
                .with(AgentBuilder.RedefinitionStrategy.REDEFINITION)
                .with(AgentBuilder.TypeStrategy.Default.REDEFINE)
                .installOn(inst);

共有1个答案

富辰阳
2023-03-14

您的MethodDelegation将在TimerDevice中调用合适的方法。要做到这一点,需要将该类加载到引导类加载器上。你的情况是这样的吗?

或者,考虑使用建议来装饰方法

 类似资料:
  • homebody能帮我提示一下如何使用byte buddy 1.6.9重新定义静态方法吗? 我试过这个: 我遇到以下异常: 线程“main”java.lang.IllegalStateException中的异常:无法注入已经加载的类型:类委托。来源 谢谢

  • 我试图在java上重新定义类。lang包,如String。类或整数。使用ByteBuddy初始化,但没有成功。我的问题是这是否可能? 这是我在我的java代理中尝试的代码: 当我检查日志的输出时,我看到的关于String类的内容是: 这是否意味着ByteBuddy没有重新定义String类?这可能吗? 非常感谢。

  • 我有以下问题: 当使用 dplyr 在 group_by() 之后改变数字列时,如果一行只包含一个值,即使用 mutate 命令时的 NaN,则此值将失败。 因此,如果分组列包含数字,它将正确地分类为dbl,但只要一个组只有一个NaN实例,它就会失败,因为dplyr将该组定义为lgl,而所有其他组都是dbl。 我的第一个(也是更一般的问题)是:当使用group_by()时,有没有一种方法告诉dpl

  • 我正在用bytebuddyapi编写一个Java代理。因此,我想了解使用Bytebuddy DSL的重传功能加载的类的方法委派。当我使用参数javaagent启动应用程序时,一切正常,控制台输出也会更改,但当在运行时附加java代理时,会执行agentmain方法,但控制台输出不会更改。也许我错过了一些进一步的ByteBuddy配置。任何帮助都将不胜感激! 这是代理代码: 以下是应用程序代码: 这

  • 字节伙伴代理是否能够克服附加API限制,例如“新方法定义”、“静态变量更改”?我可以看到,正在从代理生成器调用重定义类方法,但不确定这是否也遵循与附加API相同的限制。 我试图了解我是否可以做到以下几点: 1) 使用应用程序类加载器加载代理jar,例如并行WebAppClassLoader。我的应用程序是一个servlet webapp,在运行时它使用上面的类加载器加载所有应用程序类。 2) 完全

  • 我目前正在尝试使用ByteBuddy作为java bean实现包装键/值对的,将map键公开为普通getter/setter。 我最初按照如下方式构造生成器,允许我将