Добавление кода в класс Java с инструментами: ASM или BCEL?

Я пишу игровой движок/библиотеку, в которой у меня есть класс диспетчера событий, который отправляет события, вызывая методы слушателя "зарегистрированных" классов обработчиков событий. Можно зарегистрировать обработчик/прослушиватель событий в диспетчере событий, вызвав соответствующий метод диспетчера.

Это, очевидно, приводит к некоторому шаблонному коду для регистрации каждого обработчика событий (а также другие аспекты моего движка имеют аналогичный код bolierplate), поэтому мне было интересно - как насчет того, чтобы просто использовать 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)
    { ... }
}
12
задан Stefan Paul Noack 18 April 2012 в 10:11
поделиться