天天看點

用LOL獲得BUFF場景來看待Guava之事件總線

栗子

public class TestPreconditions {

    static class Listener {
    
        @Subscribe
        public void listen(String eventData) {
            System.out.println("接收到事件資料:" + eventData);
        }

        @Subscribe
        public void listen(Integer eventData) {
            System.out.println("接收到事件int資料:" + eventData);
        }
    }

    public static void main(String[] args) {

        EventBus bus = new EventBus();
        bus.register(new Listener());

        bus.post("這是事件資料!");
        bus.post(123456);
    }
}
           

結果:

用LOL獲得BUFF場景來看待Guava之事件總線

應用場景

public class TestLolBuff {
    //藍buff
    static class BlueBuff {
    }

    //紅buff
    static class RedBuff {
    }

    //小龍buff
    static class DragonetBuff {
    }

    //大龍buff
    static class BaronBuff {
    }

    static class Listener {

        @Subscribe
        public void listen(BlueBuff eventData) {
            System.out.println("我得到了藍buff:");
        }

        @Subscribe
        public void listen(RedBuff eventData) {
            System.out.println("我得到了紅buff:");
        }

        @Subscribe
        public void listen(DragonetBuff eventData) {
            System.out.println("我得到了小龍buff:");
        }

        @Subscribe
        public void listen(BaronBuff eventData) {
            System.out.println("我得到了大龍buff:");
        }
    }

    public static void main(String[] args) {
        EventBus bus = new EventBus();
        bus.register(new Listener());
        bus.post(new DragonetBuff());
    }
}
           

異步

public static void main(String[] args) {
    AsyncEventBus bus = new AsyncEventBus();
    bus.register(new Listener());
    bus.post(new DragonetBuff());
}
           

與Spring結合使用

@Component
public class AsyncEventBusBean {

    @Bean
    public AsyncEventBus asyncEventBus() {
        AsyncEventBus eventBus = new AsyncEventBus(Executors.newFixedThreadPool(10));
        eventBus.register(new xxx());
        return eventBus;
    }
}
           
@Autowired
private AsyncEventBus asyncEventBus;
asyncEventBus.post(xxx);
           

繼續閱讀