看起来 GWT 有自己的内置 DI 机制 ( GWT.create(Class<?>)
)。除此之外,GIN 还提供什么好处?您是否应该将它们相互结合使用,或者它们是否相互排斥?我喜欢 Guice,所以我很想使用 GIN,但如果 GWT 已经开箱即用地做同样的事情,我不想介绍它。
2 回答
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)
才能让球滚动。
GWT.create()
与依赖注入无关。这是一种工厂方法。
GWT.create(SomeThing.class)
和之间的唯一区别是可以使用所谓的延迟绑定new SomeThing()
替换或生成确切的类。但是,例如,为 d 对象提供依赖关系并没有什么意义。SomeThing
GWT.create()
GWT.create()