2013-06-06 18 views
5

guiceを使用していて、binder().requireExplicitBindings()hereを使用している例を見ています。
例のようになりますようにrequireExplicitBindingsを使用することが必須/推奨です

com.google.inject.ConfigurationException: Guice configuration errors: 

1) Explicit bindings are required and ... 

として例外が発生し

Injector injector = Guice.createInjector(new SandwichModule(), new AbstractModule() { 
    @Override 
    protected void configure() { 
     binder().requireExplicitBindings(); 
     bind(GuiceFilter.class); 
    } 
}); 

はそれを使用することが必須であり、または単にお勧め?その唯一の推奨があれば私はなぜそれを使用するのだろうか?

答えて

3

これは必ずしも必須ではありません(アクティブ化を必要とせずにデフォルト設定)。通常、guiceを使用するときは、アプリケーションを一緒に接着するのに役立つすべての「魔法」が必要です。したがって、デフォルトの動作は:explicitBindingsを必要としないことです。 しかし、しばらくの間、あなたはguiceオートマトンがあなたのやり方で取得することに気づきます。まれに、要求スイッチを使用します。 私はあなたが提供した記事全体を読んでいないので、彼らはこれらの "特殊なケース"のいずれかを扱っているか、本当に理由を考慮せずにフラグを使用しているかどうかはわかりません。とにかく、あなたのバインディングモジュールを書くならば、そのまま放置してください。

1

私は、このスイッチが速く、ここのように、注入されるべきではない、あなたが誤って注射用として何かを注釈付きプログラミングエラーにあなたを指すように非常に有用であることを考える:

@Inject 
private SomeClass someInstance = new SomeClass(12); 

工assが今も公共ノーを持っている場合Guiceは、何も言わずに特定のインスタンスを上書きします。

しかし、自動注入の有用性は、通常の重み、これよりもはるかに、あなただけの事故で「すべてのものを注入」しないように注意する必要があり、この具体例のためのよう:)

関連する問題