为了调用注释所涉及的方法,我在注释中使用时遇到了一些麻烦......我将举例说明:
class MyEventHandlers {
@handler(id=“1”)
public doSomething() {
...
}
@handler(id=“2”)
public doSomethingElse() {
...
}
}
....
subscribe(“event1”, new MyEventHandlers, “1”);
//or maybe a better way to do this?!
....
//later, when I detect ‘event1’ I can process the required handler:
process(new MyEventHandlers, “1”)
我的想法是,我希望有一种方法可以定义事件的处理程序,然后将事件链接到处理程序。 (现在考虑事件是一些字符串文字)。
总之,我不确定,用于做我想做的事情的最佳风格是什么。以上就是我现在想的。如果有更好的风格来实现这一点,请建议。
答案 0 :(得分:2)
我怀疑使用AOP框架可以更轻松地实现您想要做的事情。
但是既然你可能想要自己做这件事:
性能的关键是仅在设置期间使用反射。因此,当subscribe
时,您创建一个处理程序描述符并将其添加到事件的侦听器中。处理程序描述符基本上是java.lang.reflect.Method,其中有一个实例可以调用它,以及一些关于如何获取事件数据的知识,即该方法采用的参数。
这样您就可以通过
实现事件触发for (HandlerDescriptor desc : subscriptionMap.get(event)) {
desc.trigger(event);
}
,应该足够快。您可以为处理事件信息的处理程序提供不同的HandlerDescriptors,...
您还可以通过在类级别(通过处理程序ID键)缓存subscribe
来更快地使java.lang.reflect.Method
更快。这种反射仅在subscribe
类的方法时使用,而不是之前见过的。
我在这里没有讨论(提示:它的API风格)
.trigger()
时间为此进行调度。