W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
雖然 Hasor 提供的 Module 可以幫助您模塊化項目開發(fā)。但是在代碼層面往往多個系統(tǒng)之間還會有直接或者間接的調(diào)用,耦合度還是很高。這個時候您可以適當?shù)氖褂?Hasor 的事件機制來進行深度解耦。使用事件可以為程序的模塊劃清界限,明確了通知者和接受者之間的關(guān)系。同時使用事件還可以增加程序的可維護性和重用性。
Hasor 事件的執(zhí)行分為三種:同步(獨享線程)、同步(共享線程)、異步,它們的執(zhí)行模型如下:
無論是同步的事件模型,還是異步事件模型。在 Hasor 事件體系中,它們都有以下共同性質(zhì):
后面會有專門的文章分別介紹 Hasor 的各類事件機制差異點。在開始這些內(nèi)容之前,現(xiàn)在先讓我們來看一看如何注冊事件監(jiān)聽器。首先我們先實現(xiàn)一個事件監(jiān)聽器:
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 中事件的注冊和發(fā)送都是通過 EventContext 發(fā)送出去的。因此您需要首先拿到這個接口對象,才能將事件監(jiān)聽器注冊上。下面是不同的情況下如何取得 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());
在注冊完畢之后我們可以引發(fā)事件:
eventContext.fireSyncEvent("EventName",...);
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: