Похоже, что GWT имеет собственный встроенный механизм DI (GWT.create(Class<?>)
). Какие преимущества предлагает GIN помимо этого? Должны ли вы когда-либо использовать их в сочетании друг с другом, или они взаимоисключающие? Мне нравится Guice, поэтому у меня возникает соблазн использовать GIN, но я не хочу его представлять, если GWT уже делает то же самое прямо из коробки.
GWT.create(Class‹?›) или GIN?
Ответы (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)
, чтобы сдвинуться с мертвой точки.
GWT.create()
не имеет ничего общего с внедрением зависимостей. Это фабричный метод.
Единственная разница между GWT.create(SomeThing.class)
и new SomeThing()
заключается в том, что точный класс SomeThing
можно заменить или сгенерировать с помощью так называемого отложенная привязка. Но в GWT.create()
ничего нет о предоставлении зависимостей, например, объекту GWT.create()
d.