Google Eventbus簡單使用


    eventbus是Google Guava的事件訂閱-發布組件。其特點是簡單易用,需要編寫的代碼量很小,也不需要繼承。

Pom依賴

<dependencies>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>20.0</version>
    </dependency>
</dependencies>

 

一. EventBus

  google eventbus並沒有強制要求使用單例的EventBus,而是可以自行創建,你可以在一個容器內擁有多個EventBus實例,當然也可以自行將其配置為單例。下面的代碼是將EventBus配置成單例的

package study.yan.google.eventbus.demo;

import com.google.common.eventbus.EventBus;

public class EventBusCenter {
    private static EventBus eventBus = new EventBus();

    private EventBusCenter() {
    }

    public static EventBus getInstance(){
        return eventBus;
    }

    public static void register(Object object){
        eventBus.register(object);
    }

    public static void unregister(Object object){
        eventBus.unregister(object);
    }

    public static void post(Object object){
        eventBus.post(object);
    }
}

二. Observer

  只需要在類的方法上加上@Subscribe注解即可

package study.yan.google.eventbus.demo;

import com.google.common.eventbus.Subscribe;

public class AdviceObserver1 {
    @Subscribe
    public void ff1(AdviceObserverEventArgs args) {
        System.out.println("ff2:" + args);
    }
}
package study.yan.google.eventbus.demo;

import com.google.common.eventbus.Subscribe;

public class AdviceObserver2 {
    @Subscribe
    public void ff1(AdviceObserverEventArgs args) {
        System.out.println("ff1:" + args);
    }
}

 

三. Publish

  調用eventBus的post方法來發布一個事件

package study.yan.google.eventbus.demo;

public class Program {
    public static void main(String[] args) {
        DataObserver1 dataObserver1 = new DataObserver1();
        DataObserver2 dataObserver2 = new DataObserver2();

        EventBusCenter.register(dataObserver1);
        EventBusCenter.register(dataObserver2);

        EventBusCenter.post("a string");
        EventBusCenter.post(1);

        System.out.println("==============");

        EventBusCenter.unregister(dataObserver1);
        EventBusCenter.post("a string");
        EventBusCenter.post(1);

    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM