GWT.create(Class <?>)与GIN?

Ban*_*der 6 java gwt gwt-gin guice

看起来GWT有自己的烘焙DI机制(GWT.create(Class<?>)).除此之外,GIN还能带来哪些好处?您是否应该将它们彼此结合使用,还是相互排斥?我喜欢Guice所以我很想使用GIN,但是如果GWT已经开箱即用,那么我不想介绍它.

Col*_*rth 8

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

Gin实际上利用GWT.create这些其他功能 - 如果你没有定义规则,Gin会GWT.create自动调用.这意味着如果你有一个像这样的规则

@Inject MyRemoteServiceAsync rpcService;
Run Code Online (Sandbox Code Playgroud)

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

如果你已经理解并喜欢Guice,那么杜松子酒不应该是你的重要一步,你仍然可以直接调用GWT.create,或隐含地让Gin去做.事实上,为了甚至使用Gin,你需要打电话GWT.create(MyGinjector.class)让球滚动.


Tho*_*yer 8

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

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