2011-12-21 8 views
2

GuiceのユーザーガイドでConstructor Bindingsの章を読んだだけですが、コンストラクタバインディングをいつ使用するのかは本当に分かりません。Guice 3.0 - コンストラクタのバインディングの目的は?

私が理解する限り、コンストラクタバインディングで作成されたインスタンスがAOPに参加する以外は、@Providerメソッドと同じ機能を提供します。これは正しいです?誰かがdocのものより良い例を与えることができますか?

答えて

4

私が理解する限り、コンストラクタバインディングで作成されたインスタンスを除くすべてのメソッドは、@Providerメソッドと同じ機能を提供します。

コンストラクタバインディングにはいくつかの利点がありますが、これは多かれ少なかれ正しいものです。基本的には、たとえそうでなくても、特定のコンストラクタに@Injectがあるかのようにクラスにバインドする方法であり、アノテーションを自分で追加することはできません。 @Providesのメソッドとは異なり、より面白いことをするためのユーティリティを書くことができます。あなたが望んだ場合にも(@Inject以外の)他のいくつかのアノテーションを使用でき

bind(Foo.class).toConstructor(getOnlyConstructor(FooImpl.class)); 

:たとえば、あなたは、2つ以上が存在する場合に例外をスロー、クラスの唯一のコンストラクタを返しutilitiyメソッドを持つことができます何らかの理由でバインディングのために注釈が付いたコンストラクタを取得するユーティリティメソッドを持っています。

+2

Guiceのトルコベーコンの問題も解決します:http://tinyurl.com/turkeybaconproblem –

関連する問題