我需要在域模型中实现pub / sub系统。我正在考虑使用Guava的EventBus,但我想使用接口和适配器来保持我的域模型不知道这样的实现细节。不幸的是,EventBus使用注释进行订阅会让这个想法变得棘手。
有没有办法在不使用@Subscribe注释的情况下订阅处理程序?看看文档,似乎没有,但也许有一些我没有看到的东西。
谢谢!
答案 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
}
}
}
您只能在此特定实现中定义属性。