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