2012-10-05 46 views
3

我正在寻找在我的应用程序中使用Guava EventBus来从一个或多个数据创建者向数据使用者分发数据(例如,Double)。有条件的订阅与Guava EventBus

我知道我的消费者类,我需要注释我的数据处理程序与@Subscribe。有没有办法让这个订阅有条件?因此,例如

@Subscribe {newValue > 0.0} public void valueUpdated(Double newValue) 

我能我valueUpdated方法中添加了检查,但有没有办法从调度值,我的订阅者不感兴趣停止EventBus

有没有类似于EventBus的产品可以提供这种功能?

+0

我没有看到有条件分发的DSL在处理程序中的第一句相同条件下的显着优势。事实上,DSL可能会大幅放缓。 –

+0

@U Mad - 感谢您的评论。我有一个用例,我可以有大量的用户。在这种情况下,我认为有条件调度可能更有效率。虽然我同意让处理程序中的条件变得更简单。 – Luhar

+2

我不认为你可以在这里获得任何加速,至少不会有没有数千用户和/或普通无条件案件放缓。像'{newValue> 0.0}这样写的,它需要一个解释器,它在代码中的成本可能会超过几百次。像MyPositiveDoublePredicate.class这样写就可以快得多,但不是特别方便。在任何情况下,它都会给普通用户带来一些成本。 – maaartinus

回答

1

Spring Expression Language (SpEL)可能会有所帮助。

加:在检查EventBus后,我认为它是基于类型的调度,没办法应用基于条件的调度。如果你坚持使用表达式语言,你可以把它作为路易斯评论的用户。但表达语言是为灵活性而非速度而设计的。

+0

@盛源禄 - 谢谢你的回答。你能否给我一个关于如何使用SpEL的例子? – Luhar