我可以使用 Byte Buddy 重新定义私有方法吗?

2024-01-04

是否可以使用Byte Buddy重新定义类的私有方法?似乎使用 Byte Buddy 的入口点总是对现有类进行子类化。这样做时,显然不可能重新定义父类的私有方法(至少不能以在父类中使用重新定义的方法的方式)。

考虑以下示例:

public class Foo {
    public void sayHello() {
        System.out.println(getHello());
    }

    private String getHello() {
        return "Hello World!";
    }
}

Foo foo = new ByteBuddy()
    .subclass(Foo.class)
    .method(named("getHello")).intercept(FixedValue.value("Byte Buddy!"))
    .make()
    .load(Main.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
    .getLoaded()
    .newInstance();
foo.sayHello();

输出将是“Hello World!”。有机会获得“Byte Buddy!”吗?作为输出?


您是对的,子类化是当前使用 Byte Buddy 创建类的唯一选项。然而,从接下来几周发布的 0.3 版本开始,这种情况将会发生变化,您还可以重新定义现有的类。类的重新定义将如下所示:

ClassReloadingStrategy classReloadingStrategy = ClassReloadingStrategy
                                                   .fromInstalledAgent();
new ByteBuddy()
  .redefine(Foo.class)
  .method(named("getHello"))
  .intercept(FixedValue.value("Byte Buddy!"))
  .make()
  .load(Foo.class.getClassLoader(), classReloadingStrategy);
assertThat(foo.getHello(), is("Byte Buddy!"));
classReloadingStrategy.reset(Foo.class);
assertThat(foo.getHello(), is("Hello World"));

这种方法利用了 HotSpot 的 HotSwap 机制,该机制非常有限,因为您无法添加方法或字段。在 Byte Buddy 版本 0.4 中,Byte Buddy 将能够重新定义卸载的类,并提供一个代理构建器来实现自定义 Java 代理,以使这种重新定义更加灵活。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以使用 Byte Buddy 重新定义私有方法吗? 的相关文章

  • 获取 UndeclaredThrowableException 而不是我自己的异常

    我有以下代码 public Object handlePermission ProceedingJoinPoint joinPoint RequirePermission permission throws AccessException
  • 如果我在 JSP 中有 html 元素,那么执行顺序是什么?

    什么将执行第一个 body 元素或 head 元素 Head Body scriplet 如果我明白您的要求 JSP 文件中的每个元素都会按照代码从上到下出现的顺序进行处理
  • 如何从内容处置中读取编码的文件名

    我得到的内容处置标头值如下 附件 文件名 UTF 8 album jpeg 如何从中提取文件名 album jpeg 在查看该值时 它具有编码格式值 使用Spring的内容配置 https docs spring io spring doc
  • Gradle 同步失败:配置项目“:lib”时出现问题

    我正在尝试在 android studio 中构建一个项目 但它总是失败 并出现名为 org gradle api ProjectConfigurationException A problem occurred configuring p
  • while循环内的递归,它是如何工作的?

    你能告诉我这段java代码是如何工作的吗 public class Main public static void main String args Strangemethod 5 public static void Strangemet
  • 删除 PriorityQueue 的顶部?

    假设我使用 Java util 中的 PriorityQueue 类 我想从 PriorityQueue pq 中删除最大的数字 我们假设它位于队列的头部 下面的工作会起作用吗 1 int head pq peek pq dequeue h
  • 如何使用 Java 本机接口将字节数组传递到以 char* 作为参数的 C 函数中?

    所以我需要使用JNI从java调用C函数 当传入不同的数据类型 创建本机变量 头文件 共享库等等 时 我已经能够成功地做到这一点 但无法让它与字节数组一起使用 这是我的 C 函数 include
  • 使用 IntentService 使用 Camera2 拍照

    我正在尝试创建一个可以拍照但不显示预览的应用程序 使用本教程 https www youtube com watch v oPu42I0HSi4 https www youtube com watch v oPu42I0HSi4如果我使用和
  • CXF 客户端异常:{XXX} 的拦截器已引发异常,现在展开

    我遇到以下 CXF 异常 warning Interceptor for http example com wsdl esc 2011 12 12 AmazonEC2 http example com wsdl esc 2011 12 12
  • Java 将 String[] 转换为 int[]

    我有一个 String 其中每个元素都可以转换为整数 将其转换为 int 的最佳方法是什么 int StringArrayToIntArray String s public static int StringArrToIntArr Str
  • 在 IIS 中运行 Java Web 应用程序

    有人找到了在 IIS 中运行 Java Web 应用程序的方法吗 在我看来 编写一个将 Jetty 或自定义 servlet 容器与 IIS 集成的 ISAPI 插件 这个词正确吗 应该是完全可能的 这样做的好处是 许多优秀的高端 Java
  • Mac OSX 上使用 Java 7 的透明 JFrame/JWindow

    我们有一个屏幕共享小程序 它打开 Swing JFrame 并使用 Robot 类捕获空框架后面的屏幕 用户可以单击框架并与小程序后面的任何内容进行交互 这在 Windows 上运行良好 并且用于 Apple 的 Java 版本 但对于 M
  • 使用java将文件从GCS存储桶传输到SFTP服务器

    我能够从 GCS 存储桶读取文件 但所有库都喜欢jsch将文件传输到 SFTP 服务器时会查找文件路径 而不是内存中的文件 我不想将从GCS读取的文件写入磁盘 如何将内存中的文件传输到SFTP 我假设您想上传内存中的数据 JSch 实际上有
  • Java 会话变量

    我听说有些人认为在会话中将信息存储在服务器上是一个坏主意 因为它不安全 因此 在多页面业务流程功能中 应用程序将数据写入数据库 然后在需要时检索信息 在会话中存储私人信息是否一定不安全 只要会话本身安全 在会话中存储属性就不存在安全风险劫持
  • IntelliJ 对于 Java 项目使用的默认构建过程是什么?

    直接从 IntelliJ 中的 IDE 构建 Java 项目非常好 它速度很快 而且很有效 我无法找到任何有关 IntelliJ 如何进行这些默认构建的文档 我猜它使用Ant 我想做的是为下载我的项目的任何人自动化这个快速 轻松的构建过程
  • 如何更改使用 Google ReCaptcha 版本 2 时的错误消息?

    当为 Google ReCaptcha 版本 2 选择多张照片时 会显示以下错误消息 需要多个正确的解决方案 请解决更多 如何将错误消息更改为我网站上的自定义消息 这是图像 我认为不可能在服务器端 在谷歌 进行 这可以在客户端通过利用 js
  • 为什么我用Java计算的结果是错误的?

    我使用这段代码来计算一些东西 但几乎在所有情况下结果都是 0 0 为什么 编译器中没有警告或错误 private void jButton1ActionPerformed java awt event ActionEvent evt try
  • 使用 spring mvc 的多个域

    假设我有一个应用程序必须缩短 URL 但还要执行其他操作 喜欢google com and goo gl or facebook com and fb me 部署两个应用程序很容易 但 目前 仅部署一个应用程序更简单 使用 spring 和
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 尝试 Catch 性能 Java

    当捕获异常而不是进行检查时 try catch 需要多长时间 以纳秒为单位 假设消息具有用于查找的 HashMap 类型性能 try timestamp message getLongField MessageField TIMESTAMP

随机推荐

  • 在子目录中安装 django

    我在 Ubuntu 14 上运行 apache2 服务器 现在我想配置 Apache 与 mod wsgi 一起使用 以便在 www abc com lab 等域的子目录上运行 Django 但我总是无法做到这一点 顺便说一下我已经成功安装
  • 交叉编译:特殊的交叉编译器还是只是带选项 -march 的 gcc?

    我需要在Linux机器上为Raspberry PI 3 编译一个程序 并且代码必须符合c 17标准 官方工具链已经过时 并且缺少 c 17 编译选项 我现在可以看到的两个解决方案是 1 gcc有一个选项 march 其描述如下 https
  • 在 HTML 中使用 SVG 绘制新月

    是否可以在 HTML 中使用 SVG 绘制新月 我一直在尝试W3学校 http www w3schools com svg 但我没有看到这样的例子 我不需要您在 新月 的典型谷歌图像中看到的任何阴影 只需一个实心边框新月 您可以绘制带有两个
  • Activity和Fragment之间如何进行回调?

    我的活动中有这个界面 public interface LogoutUser void logout 我的片段实现了这个接口 所以在我的片段中 我有这个 Override public void logout logout 在我的活动中我打
  • 解锁 xcode 文件?

    几天前 我的 Mac 出现了问题 所以我把它带到了当地一家苹果商店的 Genius 吧 他们说硬盘上的分区出现故障 必须重新格式化 我使用一个程序自动将系统备份到外部服务器 所以我不担心丢失任何东西 他们重新格式化 我已经把东西放回原位 我
  • 创建新控制器 - 运行所选代码生成器时出错

    我正在使用 Visual Studio Express 2013 for Web 特别是版本 12 0 21005 1 REL 这是我使用 VS2013 的第一个项目 到目前为止我一直在使用 VS2012 我正在尝试在我的 asp net
  • Google 视频不再能够检索字幕?

    截至 4 天前 您可以向以下地址发送 GET 请求或访问并接收包含给定 YouTube 视频的字幕轨道的 xml 响应 有谁知道此支持是否已被删除 因为从今晚开始 它不再提供带有字幕的 xml 响应 每个视频的页面都是空的 有许多视频在 4
  • 如何在 jasmine 测试中模拟导出的打字稿函数?

    我正在尝试在 Jasmine 测试中模拟从打字稿文件导出的函数 我希望以下内容能够模拟导入的foo并返回 bar 规范中的值 1 模拟似乎没有被调用 所以我显然错过了一些东西 我该如何修复这个例子 demo ts export functi
  • MySQL Workbench 编辑表数据是只读的

    当尝试在 MySQL Workbench 5 2 37 中编辑表数据时 其处于只读模式 仅当表具有主键时才可编辑 是否有任何修复来处理没有主键的表 作为建议之一 我尝试升级 WB 5 2 40 但这个问题仍然存在 我假设该表有一个主键 首先
  • Angular:指令中的 updateValueAndValidity

    我有一个指令 如果输入值是整数 则在模糊时附加小数 下面是实现 import Directive ElementRef Input OnInit HostListener forwardRef from angular core impor
  • 如何创建无限循环

    好的 我需要在倒计时创建一个无限循环 我的代码是 public void countdown if x null x cancel x new CountDownTimer 20000 1000 public void onTick lon
  • 在Python中使用模糊匹配合并多列上的数据帧

    我有两个示例数据框 如下所示 df1 pd DataFrame Name 0 John 1 Bob 2 Shiela Degree 0 Masters 1 Graduate 2 Graduate Age 0 27 1 23 2 21 df2
  • 如何在 Oreo (8.0) 中使用隐式广播 PACKAGE_ADDED?

    我必须接收系统发送的隐式广播 ACTION PACKAGE ADDED 来检测应用程序的安装并执行一些代码 我使用了下面的代码 public class Receiver extends BroadcastReceiver Override
  • 在应用程序设置页面中更改通知的用户权限时更新 UILabel 文本值?

    在我的场景中 用户将收到在应用程序中接收通知的警报 如果用户单击 不允许 UILabel 将更新为 未启用 如果用户想要更改通知 用户将被导航到应用程序设置页面以更改通知权限状态 func checkNotificationPermissi
  • 使用 dev>null & 运行 exec() 命令不起作用,但 dev>null 可以

    我有这个 exec 命令运行得很好 但没有释放浏览器 即存在 php 超时问题 但实际命令继续运行 exec usr local php53 bin php csv php file user gt dev null 当我跑步时ps aux
  • Python 中“导入为”的用例

    我想知道我们是否可以使用 import as 用于创建相对紧凑或可读的代码 我知道它的通常用例基于PEP https www python org dev peps pep 0221 例如避免名称冲突 情况如下 出于演示目的 保持非常简单
  • 扩展 std::exception 类:程序不会执行适当的 catch 处理程序

    我从 std exception 派生了一个类 class exc public std exception public exc const text char throw exc const exc throw virtual exc
  • Malt 解析器抛出类未找到异常

    我正在尝试使用 NLTK 中的 Malt Parser 来解析句子 当我这样做的时候raw parse sent 它给出了退出代码 1 的错误 我在终端上执行了 java 命令 它给出了类未找到异常 我不明白现在出了什么问题 java Xm
  • android 证书指纹 sha1 可以在 firebase 和 Google Place API 中使用吗?

    我想知道我们是否可以在 Firebase 和 Google Maps API 中使用相同的证书指纹 SHA1 在此之前 我使用证书指纹 SHA1 进行 Firebase 登录授权 但是 对于 Google Places API 我也必须使用
  • 我可以使用 Byte Buddy 重新定义私有方法吗?

    是否可以使用Byte Buddy重新定义类的私有方法 似乎使用 Byte Buddy 的入口点总是对现有类进行子类化 这样做时 显然不可能重新定义父类的私有方法 至少不能以在父类中使用重新定义的方法的方式 考虑以下示例 public cla