2012-10-23 6 views
6

GWTには独自の焼き付けDI機構(GWT.create(Class<?>))があるようです。 GINはこれに何のメリットをもたらしますか?あなたはそれらを互いに組み合わせて使うべきですか、それとも互いに排他的ですか?私はGuiceが好きなので、GINを使用するように誘惑されていますが、GWTがすでに同じことを箱から出していれば導入したくありません。GWT.create(クラス<?>)とGIN?

答えて

8

ジンとGWT.createは、いくつかの違いがある - GWT.createは実装の取得について具体的であるのに対しジンは、いずれかのフィールド、セッター、またはコンストラクタに、@Inject注釈を介して依存関係を提供することについての詳細です。 Ginはあなたが提供する任意のコンストラクタを使用しますが、具体的には置換型を指定する必要がありますが、GWT.createはデフォルトコンストラクタでのみ動作し、 'rebind rules'は正確である必要はなく、コンパイル時に作成されます。また、ユーザーが実行している環境を見て、Ginが実行できないルールに基づいて特定のルールセットを選択することもできます。

Ginは実際にGWT.createを利用してこれらの他の機能を利用しています。ルールが定義されていない場合、Ginは自動的にGWT.createを呼び出します。あなたはそのRPCコールを構築するためにGWT.createを呼び出します

@Inject MyRemoteServiceAsync rpcService; 

ジンのようなルールを持っている場合、これが意味しています。これは、UiBinder、エディタドライバ、I18nのメッセージと定数などにも有効です。

Guiceのことをよく理解していれば、Ginはあなたにとって大きな一歩となるはずはなく、直接呼び出すことができますGwT.create、または暗黙のうちにGinにそれを実行するよう依頼する。実際に、Ginを使用するには、GWT.create(MyGinjector.class)に電話をかけてボールを回転させる必要があります。

8

GWT.create()は、依存性注入とは関係ありません。 工場メソッドです。

GWT.create(SomeThing.class)new SomeThing()の唯一の違いは、正確なSomeThingクラスを、いわゆるdeferred bindingを使用して置き換えることができることです。しかし、たとえばGWT.create()オブジェクトに依存関係を提供することについては、GWT.create()には何もありません。

関連する問題