GWT.create(Class‹?›) или GIN?

Похоже, что GWT имеет собственный встроенный механизм DI (GWT.create(Class<?>)). Какие преимущества предлагает GIN помимо этого? Должны ли вы когда-либо использовать их в сочетании друг с другом, или они взаимоисключающие? Мне нравится Guice, поэтому у меня возникает соблазн использовать GIN, но я не хочу его представлять, если GWT уже делает то же самое прямо из коробки.


person Bantha Fodder    schedule 23.10.2012    source источник


Ответы (2)


У Gin и GWT.create есть несколько отличий: Gin больше связан с предоставлением зависимостей через аннотацию @Inject либо в полях, сеттерах, либо в конструкторе, тогда как GWT.create конкретно о получении реализации. Gin будет использовать любой предоставленный вами конструктор, но вы должны специально указать тип замены, в то время как GWT.create будет работать только с конструктором по умолчанию, а ваши «правила повторной привязки» не должны быть такими точными и даже могут привести к тому, что новые классы создаваться во время компиляции. Он также может посмотреть, в какой среде работает пользователь, и выбрать определенный набор правил на основе этого, чего Gin не может сделать.

Gin фактически использует GWT.create для получения этих других функций — если у вас нет определенного правила, Gin автоматически вызовет GWT.create. Это означает, что если у вас есть правило вроде

@Inject MyRemoteServiceAsync rpcService;

Джин вызовет GWT.create, чтобы построить этот вызов rpc. Это также работает для UiBinder, драйверов редактора, сообщений и констант I18n и т. д.

Если вы уже понимаете и любите Guice, Gin не должен быть для вас большим шагом, и у вас все еще будет возможность напрямую вызывать GWT.create или неявно просить Gin сделать это. На самом деле, даже для того, чтобы использовать Gin, вам нужно позвонить GWT.create(MyGinjector.class), чтобы сдвинуться с мертвой точки.

person Colin Alworth    schedule 23.10.2012

GWT.create() не имеет ничего общего с внедрением зависимостей. Это фабричный метод.

Единственная разница между GWT.create(SomeThing.class) и new SomeThing() заключается в том, что точный класс SomeThing можно заменить или сгенерировать с помощью так называемого отложенная привязка. Но в GWT.create() ничего нет о предоставлении зависимостей, например, объекту GWT.create()d.

person Thomas Broyer    schedule 23.10.2012