第八节 Hasor 事件
2018-09-28 20:16 更新
虽然 Hasor 提供的 Module 可以帮助您模块化项目开发。但是在代码层面往往多个系统之间还会有直接或者间接的调用,耦合度还是很高。这个时候您可以适当的使用 Hasor 的事件机制来进行深度解耦。使用事件可以为程序的模块划清界限,明确了通知者和接受者之间的关系。同时使用事件还可以增加程序的可维护性和重用性。
Hasor 事件的执行分为三种:同步(独享线程)、同步(共享线程)、异步,它们的执行模型如下:
无论是同步的事件模型,还是异步事件模型。在 Hasor 事件体系中,它们都有以下共同性质:
- 1.按注册顺序执行事件监听器
- 2.事件监听器接口相同
- 3.事件注册方式相同
后面会有专门的文章分别介绍 Hasor 的各类事件机制差异点。在开始这些内容之前,现在先让我们来看一看如何注册事件监听器。首先我们先实现一个事件监听器:
import net.hasor.core.EventListener;
public class MyListener implements EventListener<Object> {
public void onEvent(String event, Object eventData) throws InterruptedException {
Thread.sleep(500);
System.out.println("Receive Message:" + JSON.toJSONString(eventData));
}
}
在 Hasor 中事件的注册和发送都是通过 EventContext 发送出去的。因此您需要首先拿到这个接口对象,才能将事件监听器注册上。下面是不同的情况下如何取得 EventContext 接口的例子:
ApiBinder apiBinder = ...
EventContext ec = apiBinder.getEnvironment().getEventContext();
AppContext appContext = ...;
EventContext eventContext = appContext.getInstance(EventContext.class);
or
EventContext eventContext = appContext.getEnvironment().getEventContext();
public class MyBean{
@Inject
private EventContext eventContext;
}
接着我们通过 EventContext 将事件注册到容器中。
EventContext eventContext = ...
eventContext.addListener("EventName",new MyListener());
在注册完毕之后我们可以引发事件:
eventContext.fireSyncEvent("EventName",...);
以上内容是否对您有帮助:
更多建议: