Java 使用GWT-GWT.create(someClass.class)时出现的Gin问题每次调用时都返回不同的实例
这是我的问题。我在一个gwt项目中使用Gin,我使用gwt.create(SomeClass.class)来获取实例,但问题是我想要signleton实例,为此,我在应用程序模块中将该类绑定为singleton。我执行GWT.create(TemplatePanel.class)时,它会返回不同的实例。为什么?? 下面是我的代码片段。 模块 注射器Java 使用GWT-GWT.create(someClass.class)时出现的Gin问题每次调用时都返回不同的实例,java,gwt,guice,gwt-gin,Java,Gwt,Guice,Gwt Gin,这是我的问题。我在一个gwt项目中使用Gin,我使用gwt.create(SomeClass.class)来获取实例,但问题是我想要signleton实例,为此,我在应用程序模块中将该类绑定为singleton。我执行GWT.create(TemplatePanel.class)时,它会返回不同的实例。为什么?? 下面是我的代码片段。 模块 注射器 @GinModules(AppClientModule.class) public interface AppInjector extends Gi
@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);
.......
}
GWT.create(…)
不适用于GIN,它只是以正常的GWT方式创建一个对象。你应该:
MainPanel
中插入TemplatePanel
,或TemplatePanel
@GinModules(AppClientModule.class)
public interface AppInjector extends Ginjector
{
AppInjector INSTANCE = GWT.create(AppInjector.class);
MainPanel getMainForm();
TemplatePanel getTemplateForm();
}
(注意:常量接口字段根据定义是公共的和静态的,因此您可以忽略它们。)
然后你会使用:
TemplatePanel temp = AppInjector.INSTANCE.getTemplateForm();
GWT.create(…)
不适用于GIN,它只是以正常的GWT方式创建一个对象。你应该:
MainPanel
中插入TemplatePanel
,或TemplatePanel
@GinModules(AppClientModule.class)
public interface AppInjector extends Ginjector
{
AppInjector INSTANCE = GWT.create(AppInjector.class);
MainPanel getMainForm();
TemplatePanel getTemplateForm();
}
(注意:常量接口字段根据定义是公共的和静态的,因此您可以忽略它们。)
然后你会使用:
TemplatePanel temp = AppInjector.INSTANCE.getTemplateForm();
create只调用newxxx,其中XXX是传递给它的类文本。然而,当XXX类在为其定义的模块(也称为延迟绑定)中有一些规则时,它确实发挥了一些魔力。我建议您可以Gwt.create(YYY),并且有一条规则规定,如果用户代理是Internet Explorer 2,那么它将使用ZZZ。Gwt.create只调用new XXX,其中XXX是您传递给它的类文本。然而,当XXX类在为其定义的模块(也称为延迟绑定)中有一些规则时,它确实发挥了一些魔力。我告诉你,你可以Gwt.create(YYY),有一条规则说,如果用户代理是Internet Explorer 2,那么它将使用ZZZ。Peter,我还有一个问题,我知道你熟悉Gin。当我创建任何布局/小部件的实例(例如HorizontalPanel)时,您是注入它还是使用新的HorizontalPanel()。。。如果你注射它,你是怎么做的?再次感谢。我总是使用UiBinder,在创建/注入小部件方面没有问题。但在极少数情况下,我使用
new
作为小部件。在您可能希望用其他实现(即在测试场景中)替换类/对象的级别上,注入非常有用。对于小部件,您通常不需要这样做,因为您切换了整个视图实现。当我创建任何布局/小部件的实例(例如HorizontalPanel)时,您是注入它还是使用新的HorizontalPanel()。。。如果你注射它,你是怎么做的?再次感谢。我总是使用UiBinder,在创建/注入小部件方面没有问题。但在极少数情况下,我使用new
作为小部件。在您可能希望用其他实现(即在测试场景中)替换类/对象的级别上,注入非常有用。对于小部件,您通常不需要这样做,因为您可以切换整个视图实现。