あなたが想定していることは完全には正しくありません: Guice は依存性注入に使用されます。つまり、別のクラスのコンストラクターにインターフェイス/クラスを注入できます。
Foo
インターフェイスがあり、それが implementation であるとしましょうFooImpl
。Bar
次に、の実装に依存するクラスもありますFoo
。
public class Bar {
private Foo foo;
@Inject
public Bar(@Named("foo") Foo foo) {
this.foo = foo;
}
//some other methods
}
あなたの Guice-module に書く必要があります
bind(Foo.class).annotatedWith(Names.named("Foo")).toInstance(foo);
//let's say this is part of the module MyModule extends AbstractModule
これを設定すると、Guice のInjector
-class を使用してオブジェクトを作成する main-method を作成できます。そのようです:
Injector injector = Guice.createInjector(new MyModule());
Bar bar = injector.getInstance(Bar.class);
//do something with bar
これがお役に立てば幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。
ヒント: Guiceの Web サイトを確認し、そこにあるビデオを見て、wiki を注意深く読んでください。Guice は非常に優れたツールですが、使用する前に少し勉強する必要があります。幸運を!
追加: 私の意見では、使用@Named
は悪いコードスタイルです。独自の注釈をより適切に定義できます。例えば:
@BindingAnnotation
@Target({ FIELD, PARAMETER, METHOD })
@Retention(RUNTIME)
public @interface FooAnnotation {
}
次に、クラスで置き換え@Named("foo")
、モジュールで置き換えます。@FooAnnotation
Bar
Names.named("Foo")
FooAnnotation.class