Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT-Gin异步服务注入_Java_Gwt_Guice_Gwt Gin - Fatal编程技术网

Java GWT-Gin异步服务注入

Java GWT-Gin异步服务注入,java,gwt,guice,gwt-gin,Java,Gwt,Guice,Gwt Gin,关于使用Gin注入GWT异步RPC服务,我有一个问题 我有两个类都使用相同的异步服务: class TheViewA { @Inject public TheViewA(MyServiceAsync myServiceASync) { .... } } class TheViewB { @Inject public TheViewB(MyServiceASync myServiceASync) { ....

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

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

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


class TheViewB {
    @Inject
    public TheViewB(MyServiceASync myServiceASync) {
        ....
    }
}
这个很好用。但是,我发现这将导致GWT内部调用:

GWT.create(MyServiceASync.class) 
每次注射两次。我不知道这样做的缺点是什么,但我认为它们都可以共享一个MyServiceAsync实例

有人能告诉我如何配置Gin(Guice)以便只为这两种注入创建一个MyServiceAsync实例吗

或者为注入创建单独的实例可以吗?为什么


非常感谢。

谈到注入,如果
Gin
没有找到给定类型的绑定,它会自动返回到
GWT.create()
以创建实例。这就是为什么
ClientBundle
/
GWT-RPC
/
i18n
和类似的东西可以简单地工作,并且您不必将它们绑定到自己的
AbstractGinModule
扩展中

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

public class YourModule extends AbstractGinModule {
  @Override
  protected void configure() {
    bind(MyServiceAsync.class).in(Singleton.class);
  }
}
或者您可以创建一个始终返回单例实例的
提供程序
,但前面的方法要简单得多


通常,最好在整个应用程序中注入一个单例异步实例。

最好使用asyn类性能方面的单例实例。不过我不确定杜松子酒的部分。@SSR你能详细说明一下吗?编译后的代码远程服务异步代码非常简单,我不确定创建更少的实例会有什么好处…我们分析并解释了创建远程服务异步需要时间(大约几年前),并转向了单例方法。为了回答另一个问题,是的,创建多个RPC实例是可以的——它们不包含任何状态,因此创建更多实例不会占用大量内存。添加
Singleton
范围是避免生成其他实例的正确方法,但在这种情况下,我真的不担心它-我从来没有听说过或看到过喜欢这种类型的Singleton的理由。相比之下,
RequestFactory
需要您可以避免的设置,但我也不确定这是否值得。