Guava庫學習:學習Guava EventBus(一)EventBus

   在軟件開發過程當中,對象信息的分享以及相互直接的協做是必須的,困難在於確保對象之間的溝通是有效完成的,而不是擁有成本高度耦合的組件。當對象對其餘組件的責任有太多的細節時,它被認爲是高度耦合的。當一個應用程序有高度的耦合,維護將變得很是具備挑戰,任何變化都將帶來漣漪效應。爲了解決這一類的軟件設計問題,咱們就須要基於事件的編程。本篇,咱們就來學習Guava 基於事件的編程,Guava EventBus(一)EventBus。html

 

    在基於事件的編程中,對象能夠訂閱/監聽特定事件,或發佈事件。在Java中,咱們已經對事件的監聽有了初步的認識,一個事件偵聽器是一個對象,其目的是當特定事件發生時獲得通知。Guava Cache系列中,咱們已經提到了RemovalListener,本篇起,咱們將要學習Guava EventBus類,以及它如何做用於發佈和訂閱的事件。EventBus類將可以提升相互的協做水平,並且幾乎沒有對象之間的耦合。值得注意的是,EventBus是一個輕量級、進程內發佈/訂閱的溝通風格,並不用於進程間通訊。編程

 

    本系列的學習中,咱們將學習和討論如下內容:安全

  • EventBus 以及 AsyncEventBus類併發

  • 使用EventBus註冊訂閱事件和事件通知框架

  • 使用EventBus發佈訂閱函數

  • 根據咱們的須要,編寫事件處理程序,選擇粗粒度或細粒度的事件處理機制post

  • 結合EventBus,使用依賴注入框架學習

    

    EventBusgoogle

    EventBus類位與com.google.common.eventbus包下,它是Guava基於事件編程,發佈/訂閱編程範式的重點和基礎,在一個很是高的層面,用戶將註冊EventBus特定事件的通知,發佈者將發送事件經過EventBus分發給感興趣的用戶。連續的通知全部用戶,更重要的是在任何的代碼中均可以很迅速的執行事件處理方法。spa

 

    建立 EventBus 實例

 

    經過調用EventBus構造函數,咱們就能夠建立一個EventBus實例:

        EventBus eventBus = new EventBus();

    咱們還能夠提供一個可選的字符串參數做爲標識符來建立一個EventBus(用於日誌記錄):

        EventBus eventBus1 = new EventBus(TradeAccountEvent.class.getName()) ;

 

 

    訂閱事件

 

    經過如下三個必須的步驟,能夠從EventBus接收通知對象:

  1. 對象須要定義一個公共方法,只接受一個參數,這個參數標識事件類型的對象有興趣接收通知。

  2. 事件通知暴露的方法必須使用@Subscribe註解。

  3. 最後,一個對象註冊的EventBus實例,register註冊方法,自己做爲一個參數傳遞給EventBus。

 

    發佈事件

    想要發佈事件,咱們須要向EventBus.post方法傳遞一個event對象,EventBus將調用訂閱者註冊處理程序方法,分配帶有事件對象類型的參數。這是很是強大的設計概念,包含了接口、超類、實現超類的接口等,這意味着咱們能夠很容易的,使咱們的事件處理程序,變成咱們想要的細粒度,只須要經過改變類型接受的事件處理方法。

 

    定義處理方法

    用於事件處理程序的方法,必須只接受一個事件對象參數,如前所述,EventBus將連續調用事件處理方法,因此保證這些方法快速完成顯得尤其重要。若是須要作任何擴展處理的接收事件,最好是在一個單獨的線程運行該代碼。

 

    併發性

    EventBus不會從多個線程調用處理程序方法,除非使用@AllowConcurrentEvent註釋處理程序方法。經過@AllowConcurrentEvent註解註釋處理方法,咱們斷言處理程序方法是線程安全的。使用@AllowConcurrentEvent註釋的處理程序方法,自己不會在EventBus中註冊。

 

    至此,咱們已經簡單的學習瞭如何使用EventBus類,下一篇起,咱們讓經過一些示例進行學習,歡迎持續關注。

相關文章
相關標籤/搜索