我正在编写一个游戏引擎/库,其中我有一个事件调度程序类,它通过调用“已注册”事件处理程序类的侦听器方法来调度事件。可以通过调用适当的调度程序方法向事件调度程序注册事件处理程序/侦听器。
这显然会导致一些用于注册每个事件处理程序的样板代码(并且我的引擎的其他方面也有类似的样板代码),所以我想知道 - 在加载事件处理程序期间使用 Instrumentation 添加所有必要的代码怎么样类,因此在编码时不需要向事件调度程序显式注册 - 对调度程序的 register 方法的调用会在程序运行时自动添加。
据我了解,为了使用 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)
{ ... }
}