java - GWT Gin 异步服务注入(inject)

标签 java gwt guice gwt-gin

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

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

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


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

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

GWT.create(MyServiceASync.class) 

每次注入(inject)两次。我不知道这样做有什么缺点,但我认为它们可以共享一个 MyServiceAsync 实例。

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

或者是否可以为注入(inject)和为什么创建单独的实例?

非常感谢。

最佳答案

说到注入(inject),如果Gin没有找到给定类型的绑定(bind),它会自动回退到 GWT.create()创建一个实例。这就是为什么 ClientBundle/GWT-RPC/i18n等等,只需简单地工作即可,您不必将它们绑定(bind)到您自己的 AbstractGinModule 扩展名中.

当然当Gin发现另一个相同类型的注入(inject),它注入(inject)另一个实例。要创建和注入(inject)单例实例,只需绑定(bind)您的 GWT-RPC异步服务接口(interface)进入@Singleton范围。像这样:

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

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

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

关于java - GWT Gin 异步服务注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15450528/

相关文章:

gwt - 在 GWT 中压缩数据

java - Gradle-编译多个项目,但未找到共享的项目类

java - 在java 7中将2个日期之间的差异转换为天数

java - 提高 codility 的代码性能

java - 如何通过Android谷歌地图上的触摸屏获取地址信息

java - 对于 GWT java FlexTable,如何获取值更改时选定的行号

google-app-engine - Google Web Toolkit (GWT) + Google App Engine (GAE) + 分离数据持久化

java - Guice 如何将带注释的常量重新绑定(bind)到另一个名称?

eclipse - 如何在 Xtext 测试中使用与生产环境不同的对象注入(inject)?

java - Guice 辅助注入(inject)已配置