6

私は Guice を使用しており、binder().requireExplicitBindings() hereを使用している例を見ました。
例は次のようになります。

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

それは次のような例外を引き起こします

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

1) Explicit bindings are required and ...

それを使用することは必須ですか、それとも単に推奨されていますか? それが推奨されるだけなら、なぜそれを使用するのだろうか?

4

2 に答える 2

4

これは必須ではなく (有効化の必要がないデフォルト設定になります)、必須でもありません。通常、guice を使用するときは、アプリケーションを結合するのに役立つすべての「魔法」が必要です。したがって、デフォルトの動作は次のとおりです。explicitBindings は必要ありません。しかし、ときどき、自動化された自動化が邪魔をしていることに気付くことがあります。まれに、require スイッチを使用することがあります。あなたが提供した記事全体を読んでいないので、これらの「特別なケース」のいずれかを扱っているのか、それとも理由を考えずにフラグを使用しているだけなのかわかりません. とにかく、バインディング モジュールを作成する場合は、省略してください。

于 2013-06-06T15:08:14.120 に答える
2

このスイッチは、次のように、注入してはならないものに注入可能として誤って注釈を付けたプログラミングエラーをより迅速に指摘するのに非常に役立つと思います。

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

SomeClass が引数のない public コンストラクターも持っている場合、Guice は何も言わずに特定のインスタンスを上書きするだけです。

ただし、通常、自動注入の有用性はこれよりもはるかに重要であるため、この特定の例では、誤って「すべてを注入」しないように注意する必要があります:)

于 2013-12-16T11:43:35.683 に答える