Что означает GWT.create и почему я должен его использовать? - PullRequest
4 голосов
/ 17 января 2012

Я новичок в GWT. у меня ниже строки кода.

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

что означает вышеуказанная строка и почему я не могу использовать другие альтернативы для ее создания?

Пожалуйста, помогите мне!

Спасибо.

Ответы [ 3 ]

7 голосов
/ 17 января 2012

GWT.create используется для отложенного связывания. Это позволяет вам предоставлять разные реализации одного и того же сервиса на основе браузера пользователя. Смотрите следующий вопрос:

Зачем использовать GWT.create () вместо new?

Если вам не нужно иметь несколько реализаций вашего сервиса, просто создайте его с помощью нового!

1 голос
/ 24 октября 2014

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 не поддерживается и для данной темы.Обратите внимание, что «когда-свойство-это» является необязательным, и если не предоставлено, он всегда будет использовать эту реализацию для данного интерфейса.

  • Он также ищет генераторы, в этом случае генерируется новый классво время компиляции 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 могут быть перезаписаны другими объявлениями, которые обрабатываютсявпоследствии, поэтому, если вы используете модуль, который объявляет правило, вы можете изменить это правило, объявив новое правило после объявления наследования модуля, содержащего исходное объявление.

1 голос
/ 17 января 2012

GWT работает, создавая сервис так же, как RMI.Здесь вы создаете сервис SomeClientService, который находится в пакете клиента.Он содержит все функции, которые можно назвать на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...