番石榴EventBus:没有注释订阅?

时间:2012-04-18 22:04:33

标签: java events guava

我需要在域模型中实现pub / sub系统。我正在考虑使用Guava的EventBus,但我想使用接口和适配器来保持我的域模型不知道这样的实现细节。不幸的是,EventBus使用注释进行订阅会让这个想法变得棘手。

有没有办法在不使用@Subscribe注释的情况下订阅处理程序?看看文档,似乎没有,但也许有一些我没有看到的东西。

谢谢!

2 个答案:

答案 0 :(得分:6)

番石榴团队成员。

非常谨慎的是,您只能使用@Subscribe注释订阅处理程序 - EventBus旨在替换接口,适配器等,而不是补充它们 - 但为什么你说暴露更多的实现细节?根据我们的经验,它通常会减少细节。

答案 1 :(得分:0)

解决方法是调整处理程序。类似的东西:

class GuavaHandler<T extends Message> implements Handler<T> {
    private Handler<T> handler;

    public GuavaHandler(Handler<T> handler) {
        this.handler = handler;
    }

    @Override
    @Subscribe
    public void handle(T message) {
        try {
            handler.getClass().getMethod("handle", message.getClass());
            handler.handle(message);
        } catch (NoSuchMethodException ignored) {
            // workaround
        }
    }
}

您只能在此特定实现中定义属性。