動手作一個EventBus(一):Guava和EventBus的使用

#EventBus(一)   首先在這裏介紹一下Guava,引用併發編程網的說法,Guava工程包含了若干被Google的 Java項目普遍依賴 的核心庫,例如:集合 [collections] 、緩存 [caching] 、原生類型支持 [primitives support] 、併發庫 [concurrency libraries] 、通用註解 [common annotations] 、字符串處理 [string processing] 、I/O 等等。 全部這些工具天天都在被Google的工程師應用在產品服務中。根據這段說明看來,Guava的定位應該和Apache Commons工具包相似。
  
  今天要介紹的就是Guava中的EventBus(事件總線),EventBus經過對事件的發佈和訂閱,來實現對事件的處理。要了解事件總線,首先須要對觀察者模式有必定了解,這裏就不細講觀察者模式了。首先放一個EventBus的demo:    ###1.1 接收消息的Service EventService.javahtml

public class EventService {
	
	/**
	 * 接收類型爲String.class的Event
	 */
    @Subscribe
    public void sub(String message) {
        System.out.println(this.toString() + " : " +message);
    }
}

###1.2 事件總線 Demo1.java public class Demo1 {java

[@Test](https://my.oschina.net/azibug)
    public void testEventBus(){
        EventBus eventBus = new EventBus();
        eventBus.register(new EventService());
        eventBus.post("lanxiang ooooooo~~~~~");
    }
}

運行測試用例,控制檯輸出,能夠看到註冊到EventBus中的EventService的訂閱了事件類型爲String.class的方法被執行了。編程

com.lanxiang.guava.eventbus.demo.EventService@4fbc9499 : lanxiang ooooooo~~~~~

###1.3 異步事件總線 Demo2.java緩存

public class Demo2 {

    [@Test](https://my.oschina.net/azibug)
    public void testAysncEventBus() {
        AsyncEventBus eventBus = new AsyncEventBus(Executors.newFixedThreadPool(3));
        eventBus.register(new EventService());
        String message = "I have sent ";
        for (int i = 0; i < 100; i++) {
            eventBus.post(message + i + " numbers.");
        }
        System.out.println("============");
    }
}

  能夠看到,使用Guava的EventBus只須要三個步驟:併發

  * 初始化EventBus,能夠選擇異步事件總線,須要初始化線程池異步

  * 把提供訂閱服務的類註冊到EventBus中工具

  * 定義好接收Event的方法,給該方法加上@Subscribe註解,方法的參數便是訂閱的事件類型post

####下一章會介紹怎樣動手寫一個簡單的EventBus,先出去健個身~~明天去美團報道啦,開心😊測試

相關文章
相關標籤/搜索