2012-10-23 23 views
6

它看起來像GWT有自己的烘烤DI機制(GWT.create(Class<?>))。 GIN爲此提供了什麼好處?你是否應該將它們相互結合使用,還是相互排斥?我喜歡Guice,因此我很想使用GIN,但是如果GWT已經在開箱即用的情況下做了同樣的事情,不想介紹它。GWT.create(類<?>)與GIN?

回答

8

杜松子酒和GWT.create有一些差異 - 杜松子酒更多的是經由@Inject註釋提供的相關性,無論是在字段設置器,或構造,而GWT.create是特別有關獲取的實現。杜松子酒會使用您提供的任何構造函數,但您必須專門提供替換類型,而GWT.create只能使用默認構造函數,而您的「重新綁定規則」不需要非常精確,甚至可以導致新類在編譯時創建。它還能夠查看用戶正在運行的環境,並根據該規則選擇一組特定的規則,這是Gin無法做到的。

杜松子酒實際上使用GWT.create來獲得這些其他功能 - 如果您沒有定義規則,杜松子酒會自動呼叫GWT.create。這意味着如果你有一個像

@Inject MyRemoteServiceAsync rpcService; 

杜松子酒的規則將調用GWT.create構建RPC調用。這也適用於UiBinder,編輯驅動程序,I18n消息和常量等。

如果您已經理解並喜歡Guice,杜松子酒不應該是您的一大步,而且您仍然可以直接調用GWT.create,或者暗示讓Gin去做。事實上,爲了使用杜松子酒,您需要撥打GWT.create(MyGinjector.class)來讓球滾動。

8

GWT.create()與依賴注入無關。這是一個工廠方法。

GWT.create(SomeThing.class)new SomeThing()之間的唯一區別在於,可以使用所謂的deferred binding替換或生成確切的SomeThing類。但是在GWT.create()中沒有提供關於例如對GWT.create() d對象的依賴關係。