java - 使用 GWT 的 Gin 问题 - GWT.create(someClass.class) 每次调用时返回不同的实例

标签 java gwt guice gwt-gin

这是我的问题。我在 gwt 项目中使用 Gin,我使用 GWT.create(SomeClass.class) 来获取实例,但问题是我想要 signleton 实例,为此我将应用程序模块中的该类绑定(bind)为单例。我执行 GWT.create(TemplatePanel.class) 的每一本书都返回不同的实例..为什么? 这是我的代码片段。 模块

public class AppClientModule extends AbstractGinModule
{
protected void configure()
{
  bind(MainPanel.class).in(Singleton.class);
  bind(TemplatePanel.class).in(Singleton.class);
}
} 

注入(inject)器

@GinModules(AppClientModule.class)
public interface AppInjector extends Ginjector
{
  MainPanel getMainForm();
  TemplatePanel getTemplateForm();
}

模板面板

public class TemplatePanel extends VerticalPanel
@Inject
public TemplatePanel()
{
  this.add(initHeader());
  this.add(initContent());
}
..

主面板

public void onSuccess(List<MyUser> result)
    {
.......
  TemplatePanel temp = GWT.create(TemplatePanel.class);

.......
}

和入口点

private final AppInjector injector = GWT.create(AppInjector.class);
public void onModuleLoad()
{
  MainPanel mf = injector.getMainForm();
  TemplatePanel template = injector.getTemplateForm();
  template.setContent(mf);
  RootPanel.get().add(template);
}

最佳答案

GWT.create(..) 不适用于 GIN,它只是以普通的 GWT 方式创建一个对象。您应该:

  1. MainPanel中注入(inject)TemplatePanel,或者

  2. 实例化注入(inject)器(可能通过静态方法)然后获取TemplatePanel

我通常有一个注入(inject)器的静态引用(因为每个应用只需要一个)所以我可以在任何地方访问它:

@GinModules(AppClientModule.class)
public interface AppInjector extends Ginjector
{
    AppInjector INSTANCE = GWT.create(AppInjector.class);

    MainPanel getMainForm();
    TemplatePanel getTemplateForm();
}

(注意:常量接口(interface)字段根据定义是公共(public)和静态的,因此您可以省略它们。)

然后你会使用:

TemplatePanel temp = AppInjector.INSTANCE.getTemplateForm();

关于java - 使用 GWT 的 Gin 问题 - GWT.create(someClass.class) 每次调用时返回不同的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6213672/

相关文章:

java - 如何在 GWT 中设置事件边界?

java - 具有昂贵成员实例的 Guice Provider 是否应该使用 @Singleton 进行注释?

java - 为什么这些打印输出不同?

java - GWT 应用程序的 Google +1

java - NetBeans 8.0 + GWT 2.6+

java - 运行时的依赖确定

java - Guice 每个请求模块覆盖?

java - 具有不同参数列表的继承

java - 在 Android 上将 GeoFire 与 Firebase 结合使用,但找不到 DatabaseReference 类

Java 迭代器遍历 Excel 行