GWT.create意味着什么,我为什么要使用它?

时间:2012-01-17 10:40:39

标签: gwt

我是GWT的新手。我有以下代码行。

SomeClientServiceAsync someService = GWT.create(SomeClientService.class);

上面的行是什么意思,为什么我不能使用任何其他替代方法来实例化它?

请帮助我!

感谢。

3 个答案:

答案 0 :(得分:7)

GWT.create用于延迟绑定。这允许您根据用户的浏览器提供相同服务的不同实现。请参阅以下问题:

Why use GWT.create() instead of new?

如果您不需要多次实施服务,只需通过新服务创建!

答案 1 :(得分:1)

GWT的工作原理就是像RMI一样创建服务。在这里,您将创建驻留在客户端程序包中的服务SomeClientService。它包含所有可以称为服务器端的功能。

答案 2 :(得分:1)

GWT.create以不同的方式工作:

  • 它试图查看gwt.xml文件中是否没有声明要使用哪个实现,具体取决于GWT属性。这个GWT属性可以是众所周知的用户代理,在这种情况下,它将具有为每个浏览器选择不同实现的效果,但它也可以用于其他事情,例如禁用日志记录(记录是否启用的事实)与运行的浏览器无关)

示例:

<replace-with class="com.x.app.client.ui.base.button.CustomSlicedButtonCellAppearance">
    <when-type-is class="com.x.app.client.ui.base.button.CustomButtonCellAppearance" />
    <when-property-is name="gxt.css3.enabled" value="false"/>
    <when-property-is name="gxt.theme" value="themeName" />
</replace-with>

在这种情况下,只有在不支持css3和给定主题的情况下,它才会使用CustomSlicedButtonCellAppearance来调用GWT.create(CustomButtonCellAppearance.class)。请注意,“when-property-is”是可选的,如果没有提供,它将始终使用该实现用于给定的接口。

  • 它还查找生成器,在这种情况下,在GWT编译期间(或在devmode中)生成新类,通常基于传递给create方法的接口中存在的注释。

示例:

<generate-with class="org.fusesource.restygwt.rebind.RestServiceGenerator">
  <when-type-assignable class="org.fusesource.restygwt.client.RestService" />
</generate-with>

在这种情况下,RestServiceGenerator将生成用于提交请求的代码。 另一个例子是UIBinder的工作原理:除了在界面中使用注释外,它还根据ui.xml文件中的内容生成代码。

  • 如果没有声明与传递给GWT.create方法的类/接口匹配,那么它将尝试在该类上执行新的操作(如果是接口,它将失败)。

gwt.xml文件中的声明可以被之后处理的其他声明覆盖,因此如果您使用声明规则的模块,则可以通过在包含该模块的模块的继承声明后声明新规则来更改该规则。原始声明。