gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:34:50 32 4
gpt4 key购买 nike

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

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com