GWT.create是什么,为什么我需要使用它?

4

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

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

上面这行代码是什么意思,为什么不能使用其他方式实例化它?

请帮帮我!

谢谢。

3个回答

7

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

为什么要使用 GWT.create() 而不是 new?

如果您不需要多个服务实现,只需通过 new 创建即可!


1
GWT 的工作原理是创建一个类似于 RMI 的服务。在这里,您正在创建 SomeClientService 服务,该服务位于客户端包中。它包含可以在服务器端调用的所有函数。

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”是可选的,如果未提供,则始终使用给定接口的该实现。
此外,它还会查找生成器,在这种情况下,通常基于传递给create方法的接口中存在的注释,在GWT编译期间(或在开发模式下)生成一个新类。
例如:
<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方法传递的类/接口没有匹配的声明,那么它将尝试对该类进行new操作(在接口的情况下,它将失败)。
gwt.xml文件中的声明可以被后续处理的其他声明覆盖,因此如果您正在使用声明规则的模块,则可以通过在包含原始声明的模块的inherits声明之后声明新规则来更改该规则。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接