gpt4 book ai didi

java - 将代码添加到带有 Instrumentation : ASM or BCEL? 的 Java 类

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:22 25 4
gpt4 key购买 nike

我正在编写一个游戏引擎/库,其中有一个事件调度程序类,它通过调用“已注册”事件处理程序类的监听器方法来调度事件。可以通过调用适当的调度程序方法向事件调度程序注册事件处理程序/监听器。

这显然会导致一些用于注册每个事件处理程序的样板代码(我的引擎的其他方面也有类似的样板代码),所以我想知道 - 在加载过程中使用 Instrumentation 添加所有必要的代码怎么样?事件处理程序类,因此在编码时无需显式注册事件调度程序 - 程序运行时会自动添加对调度程序注册方法的调用。

据我了解,为了使用 Instrumentation,应该使用一些字节码修饰符 API。我知道两个 - ASM 和 BCEL。我应该使用哪一个?显然,这是我尝试完成的一项有点简单的任务,所以我想要一个更容易学习和更好记录的任务。

编辑:这是一个具体的例子。

原始事件处理类:

@Handler //indicates this this class should be transformed
public class MouseEventHandler implements EventHandler<MouseEvent>
{
//hidden default constructor
public void handleEvent(MouseEvent event)
{ ... }
}

改造后:

@Handler
public class MouseEventHandler implements EventHandler<MouseEvent>
{
public MouseEventHandler()
{
//add this line of code to default constructor
Game.getEventDispatcher().addEventHandler(this);
}
public void handleEvent(MouseEvent event)
{ ... }
}

最佳答案

Java 字节码库:

  • ASM快速且积极地开发。
  • BCEL比较慢。
  • Javassist如果您不熟悉 Java 字节码,这可能是最容易上手的。
  • cglib建立在 ASM 之上,提供一些更高级别的抽象。
  • Byte Buddy通过 DSL 生成类。积极维护并看到越来越多的使用。

不过,在开始字节码操作之前,我会考虑其他选项。

关于java - 将代码添加到带有 Instrumentation : ASM or BCEL? 的 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10205187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com