我应该使用哪个GWT EventBus?

21
在gwt-user.jar中有两个EventBus接口和SimpleEventBus实现。
分别是com.google.gwt.event.shared.EventBuscom.google.web.bindery.event.shared.EventBus,本文将其称为“gwt.event”和“web.bindery”。
通过查看JavaDocs和源代码,可以看出gwt.event仅仅是将web.bindery包装起来。但是,gwt.event的实现也隐藏了一些已废弃的方法。
那么,我应该使用哪个实现呢?(我使用的是GWT 2.4版本)

1
我也有同样的困扰,或许还有很多其他人也是。我忽略了被废弃的建议,使用旧的软件包,因为Google已经在这方面制造了一些混乱。 - Blessed Geek
4个回答

19

一般情况下,你应该使用com.google.web.bindery中的版本。以前唯一可用的版本在com.google.gwt.event中,但当RequestFactory和AutoBeans从GWT本身移出并移到com.google.web.bindery中时,它们可以在非GWT客户端中运行。

如果在你的Presenter等组件中使用com.google.web.bindery版本,这将使它更易于在非GWT应用中使用,如果需要的话。当向PlaceController和其他使用EventBus的类传递该实例时,也不会出现弃用警告。


啊!非 GWT 客户端这么有意义。 - checketts
3
好的,我会尽力为您翻译以下内容:如果你使用Activity和Places,就需要在start方法中使用com.google.gwt.event.shared.EventBus。 - Christian Achilli

4

我知道这个问题已经有了一个答案,但是可能值得添加以下内容。如上面我的评论所说,Activity仍然需要com.google.gwt.event.shared.EventBus类。为避免废弃警告,我采取了以下措施(我使用GIN):

public class GinClientModule extends AbstractGinModule {

    @Override
    protected void configure() {
        bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
        ...
    }

    @Provides
    @Singleton
    public com.google.gwt.event.shared.EventBus adjustEventBus(
            EventBus busBindery) {
        return (com.google.gwt.event.shared.EventBus) busBindery;
    }

...

通过这样做,你将始终使用bindery包中“新”版本的事件总线对象。

2

感谢问题链接。否则我会直接遇到这个问题。 - checketts

0
让选择变得更加复杂的是,我在我的GWT应用程序中使用了guava,而谷歌团队又在其中添加了另一个EventBus(甚至功能更少)。
也许这些人需要坐在一起定义一个实现来统治它们所有?
显然,我希望避免所有对GWT的依赖,因为这些代码并不严格用于GWT代码,所以Guava看起来很有趣。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接