2012-01-17 78 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文件可以被之後處理的其他聲明所覆蓋,所以如果您使用聲明規則的模塊,則可以通過在包含原始聲明的模塊的繼承聲明之後聲明新規則來更改該規則。