我有一个关于使用 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/