GWT Gin异步服务注入

时间:2013-03-16 14:36:45

标签: java gwt guice gin

我有一个关于使用Gin注入GWT异步RPC服务的问题。

我有两个类都使用相同的Async服务:

class TheViewA {    
    @Inject
    public TheViewA(MyServiceAsync myServiceASync) {
        ....
    }
}


class TheViewB {
    @Inject
    public TheViewB(MyServiceASync myServiceASync) {
        ....
    }
}

这很好用。但是,我发现这会导致GWT内部调用:

GWT.create(MyServiceASync.class) 
每次注射两次

。我不知道这有什么缺点,但我认为他们都可以共享一个MyServiceAsync实例。

有人可以告诉我如何配置Gin(Guice),以便只为注射创建一个MyServiceAsync实例吗?

或者为两次注射创建单独的实例是否可以?为什么?

非常感谢。

1 个答案:

答案 0 :(得分:1)

当涉及到注入时,如果Gin找不到给定类型的绑定,它会自动回退到GWT.create()以创建实例。这就是ClientBundle / GWT-RPC / i18n之类的原因,只是Just Works,而且您不必将它们绑定到您自己的AbstractGinModule扩展名中。

Gin找到另一个相同类型的注入时,它会注入另一个实例。要创建和注入单个实例,只需将GWT-RPC异步服务接口绑定到@Singleton范围即可。像这样:

public class YourModule extends AbstractGinModule {
  @Override
  protected void configure() {
    bind(MyServiceAsync.class).in(Singleton.class);
  }
}

或者您可以创建一个始终返回单例实例的Provider<MyServiceAsync>,但之前的方法要简单得多。

通常首选在整个应用程序中注入单例异步实例。