Tôi đang viết một công cụ/thư viện trò chơi, trong đó tôi có một lớp điều phối sự kiện gửi các sự kiện bằng cách gọi các phương thức nghe của các lớp xử lý sự kiện "đã đăng ký". Người ta có thể đăng ký một trình xử lý sự kiện/người nghe với người điều phối sự kiện bằng cách gọi phương thức điều phối thích hợp. Điều này rõ ràng dẫn đến một số mã boilerplate để đăng ký mọi xử lý sự kiện (và các khía cạnh khác của động cơ của tôi có mã bolierplate tương tự), vì vậy tôi đã tự hỏi - làm thế nào về việc sử dụng Instrumentation để thêm vào tất cả các mã cần thiết trong khi tải của lớp xử lý sự kiện, do đó không đăng ký rõ ràng với trình điều phối sự kiện là cần thiết trong khi mã hóa - cuộc gọi đến phương thức đăng ký của điều phối viên được thêm tự động khi chương trình được chạy.Thêm mã vào một lớp Java w/Thiết bị đo đạc: ASM hoặc BCEL?
Đó là sự hiểu biết của tôi rằng để sử dụng Thiết bị đo đạc nên sử dụng một số API bổ trợ bytecode. Tôi biết hai - ASM và BCEL. Tôi nên sử dụng cái nào? Rõ ràng, đây là một nhiệm vụ hơi đơn giản mà tôi đang cố gắng làm, vì vậy tôi muốn một công việc dễ học và tài liệu tốt hơn.
EDIT: Đây là một ví dụ cụ thể.
gốc lớp xử lý sự kiện:
@Handler //indicates this this class should be transformed
public class MouseEventHandler implements EventHandler<MouseEvent>
{
//hidden default constructor
public void handleEvent(MouseEvent event)
{ ... }
}
Sau khi chuyển đổi:
@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)
{ ... }
}
bcel đã được đưa vào JDK –
@ alexander.box: Có, là phụ thuộc vào XSLTC biến Xalan, nhưng nó không phải là API chuẩn và cũng bị ẩn trong gói com.sun.org.apache.bcel.internal ! Tốt hơn cung cấp bình của riêng bạn. – Daniel
Ồ, và trong khi tôi đang ở đó: ASM là một lựa chọn rất tốt khi các lớp học phải được thiết kế. Dễ hiểu và sử dụng. Ngoài ra nó có một tài liệu rất tốt đẹp. – Daniel