Java GWT-Gin异步服务注入
关于使用Gin注入GWT异步RPC服务,我有一个问题 我有两个类都使用相同的异步服务: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) { ....
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
需要您可以避免的设置,但我也不确定这是否值得。