byte-buddy - 拦截签名类的策略

标签 byte-buddy

我正在尝试对 com.microsoft.azure.eventprocessorhost.PartitionContext 进行并发测试,它在签名的 jar 中具有多参数包保护的构造函数。

我想基本上忽略该构造函数(或传递空值)并重写一个方法来增加计数器。该类不是最终的,构造函数或相关方法也不是最终的。

由于签名而直接导致安全异常的子类化。我查看了各种示例,并使用了 ByteBuddyTutorialExamplesTest 的本地版本,但没有效果。

目前,我正在考虑放弃并拦截该类的调用站点。也就是说,拥有目标 (PartitionContext) 的假版本会很方便。

我是否错过了任何技巧,或者我想要完成的事情是不可能的?

最佳答案

Byte Buddy 提供了一个 ClassLoadingStrategy,它将类注入(inject)到类加载器中,并且可以使用给定的 ProtectionDomain。但是,确实需要明确提供域。

要应用此策略,请使用第二个参数重载 load 方法:

builder.make().load(sealedClass.getClassLoader(), 
  ClassLoadingStrategy.Default.INJECTION.with(sealedClass.getProtectionDomain()))

关于byte-buddy - 拦截签名类的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42184038/

相关文章:

java - 经过Byte Buddy改造后,如何在不加载或保存类的情况下获取类信息?

java - ByteBuddy - 读取 java 代理中的类注释

java - 有没有办法从 ByteBuddy 的拦截器中通过 MethodDescription 调用方法?

gradle - 如何在源文件中添加源代码文件作为构建依赖项和/或访问定义?

java - Byte Buddy 将 Try block 添加到现有方法中

java - Rebase方法拦截,完全重写方法

java - Byte Buddy 生成的类对 Orika (Javaassist) 不可见

java - 无法使用 javaagent 为 spring boot uber jar 应用程序检测 apache httpclient

java - Byte Buddy 的方法委托(delegate)

java - 使用 ByteBuddy : "class redefinition failed: attempted to add a method" 重新定义方法时出错