2012-01-17 98 views

回答

7

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

Why use GWT.create() instead of 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> 

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

  • 它还查找发电机,在这种情况下GWT编译过程中产生一个新的类(或在DEVMODE)通常是基于注解存在于传递到创建方法的接口。

实施例:

<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文件可以被之后处理的其他声明所覆盖,所以如果您使用声明规则的模块,则可以通过在包含原始声明的模块的继承声明之后声明新规则来更改该规则。