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