私は依存性注入の目的を理解していると思いますが、それを行うために Guice のようなものが必要な理由がわかりません (もちろん、 Guice は必要ありませんが、それを使用することが有益である理由を意味します)。 )。次のような既存の (非 Guice) コードがあるとします。
public SomeBarFooerImplementation(Foo foo, Bar bar) {
this.foo = foo;
this.bar = bar;
}
public void fooThatBar() {
foo.fooify(bar);
}
そして、おそらく私のmain()のどこかより高いレベルで、私は持っています:
public static void main(String[] args) {
Foo foo = new SomeFooImplementation();
Bar bar = new SomeBarImplementation();
BarFooer barFooer = new SomeBarFooerImplementation(foo, bar);
barFooer.fooThatBar();
}
これで、基本的に依存性注入の利点が得られましたね。より簡単なテスト可能性など? もちろん、必要に応じて main() を簡単に変更して、ハードコーディングする代わりに構成から実装クラス名を取得することもできます。
私が理解しているように、Guice で同じことを行うには、次のようにします。
public SomeModule extends AbstractModule {
@Override
protected void configure() {
bind(Foo.class).to(SomeFooImplementation.class);
bind(Bar.class).to(SomeBarImplementation.class);
bind(BarFooer.class).to(SomeBarFooerImplementation.class);
}
}
@Inject
public SomeBarFooerImplementation(Foo foo, Bar, bar) {
this.foo = foo;
this.bar = bar;
}
public static void main(String[] args) {
Injector injector = Guice.createInjector(new SomeModule());
Foo foo = injector.getInstance(Foo.class);
barFooer.fooThatBar();
}
あれですか?私には、構文糖衣のように思えますが、特に有用な構文糖衣ではありません。また、「new XxxImplementation()」を main() で直接実行するのではなく、別のモジュールに分割することに何らかの利点がある場合は、とにかく Guice なしで簡単に実行できます。
そのため、非常に基本的なものが欠けているように感じます。Guice 方式の利点を教えてください。
前もって感謝します。