看起来GWT有自己的烘焙DI机制(GWT.create(Class<?>)
)。除此之外,GIN还能带来哪些好处?您是否应该将它们彼此结合使用,还是相互排斥?我喜欢Guice所以我很想使用GIN,但是如果GWT已经开箱即用,那就不想介绍它了。
答案 0 :(得分: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,那么杜松子酒不应该是你的重要一步,你仍然可以直接调用GWT.create,或隐含地让Gin去做。事实上,为了甚至使用Gin,你需要调用GWT.create(MyGinjector.class)
来推动球。
答案 1 :(得分:8)
GWT.create()
与依赖注入无关。这是工厂方法。
GWT.create(SomeThing.class)
和new SomeThing()
之间的唯一区别是,可以使用所谓的deferred binding替换或生成确切的SomeThing
类。但GWT.create()
中没有关于例如为GWT.create()
d对象提供依赖关系的内容。