Guiceには豆を初期化することはできますか?
-
23-08-2019 - |
質問
私は前に(およびそれのように)春を使用しましたが、私は<のhref =「http://code.google.com/p/google-guice/」のrel = "nofollowを見てみると思いましたnoreferrer "> Guiceのでます。
のGuiceを使って豆にマップやリストのようなものを初期化する方法はありますか?
たとえば、私はいくつかのBeanに処理したい項目のリストを注入する春の前に次のことをやった。
<property name="FilesToProcess">
<list>
<value>file1.xml</value>
<value>file2.xml</value>
</list>
</property>
どのように私はGuiceの中でこれを行うことができますか?
解決
Guice2はあなたのために働く必要がありMultiBindingsとMapBindingsを、持っています。
https://github.com/google/guice/wiki/Multibindingsする
更新:
再びこれを見た後、あなたがおそらく任意のオブジェクトとして、Guiceのにランタイム値を注入する方法を尋ねるすることができると思われます。
Guiceのは非常に型保証されたコードとして、すべてをやって周りを集中しているので、それは向いていません 当然これに。私はGuiceのに入力を提供するためにやったことはXMLスキーマを作成し、この中を吸うと結果のオブジェクトを注入するJAXBを使用することです。
Names.bindProperties方法は、Guiceのに定期的に古い性質を結合するためにあります 定数ます。
があり春との統合のいくつかのレベルもあるので、あなたはこのように見てみたいことがあります 十分ます。
他のヒント
のGuiceはあなたがタイプリテラルを注入することができます。構文は少し奇妙です。理由を説明するブログエントリではあります。
バインディングは、次のようになります
public class SampleModule extends AbstractModule {
protected void configure() {
bind(new TypeLiteral<List<String>>() {}).
annotatedWith(Names.named("FilesToProcess")).
toInstance(Arrays.asList("file1.xml", "file2.xml"));
}
}
そして、アプリケーションのコードは次のように名前でリストを挿入できます:
public class SampleClass {
private final List<String> files;
@Inject
public SampleClass(@Named("FilesToProcess") List<String> files) {
this.files = files;
}
}
私は、ランタイム値のためデイブStengleinに同意します。
の構成に特化されている Obix のようなフレームワークがあります。私はののコードインジェクション用のGuiceのが好きで、彼らはそのの設定注入の
のために優れています