6

看起来 GWT 有自己的内置 DI 机制 ( GWT.create(Class<?>))。除此之外,GIN 还提供什么好处?您是否应该将它们相互结合使用,或者它们是否相互排斥?我喜欢 Guice,所以我很想使用 GIN,但如果 GWT 已经开箱即用地做同样的事情,我不想介绍它。

4

2 回答 2

8

Gin 和GWT.create一些不同之处 - Gin 更多的是通过@Inject注解提供依赖关系,无论是在字段、设置器或构造函数上,而GWT.create具体是关于获取实现。Gin 将使用您提供的任何构造函数,但您必须专门提供替换类型,而GWT.create只能使用默认构造函数,并且您的“重新绑定规则”不需要非常精确,甚至可以导致新类成为在编译时创建。它还能够查看用户正在运行的环境,并根据该环境选择一组特定的规则,这是 Gin 无法做到的。

Gin 实际上是利用GWT.create来获得这些其他特性的——如果你没有定义规则,Gin 会GWT.create自动调用。这意味着如果您有类似的规则

@Inject MyRemoteServiceAsync rpcService;

Gin 将调用GWT.create来构建该 rpc 调用。这也适用于 UiBinder、编辑器驱动程序、I18n 消息和常量等。

如果您已经了解并喜欢 Guice,那么 Gin 对您来说应该不是很大的一步,您仍然可以直接调用 GWT.create,或者隐式要求 Gin 执行此操作。事实上,为了使用 Gin,您需要调用GWT.create(MyGinjector.class)才能让球滚动。

于 2012-10-23T13:14:42.527 回答
8

GWT.create()与依赖注入无关。这是一种工厂方法。

GWT.create(SomeThing.class)和之间的唯一区别是可以使用所谓的延迟绑定new SomeThing()替换或生成确切的类。但是,例如,为 d 对象提供依赖关系并没有什么意义。SomeThingGWT.create()GWT.create()

于 2012-10-23T14:02:32.360 回答