4

私は以前にSpringを使用したことがあります(そしてそれが好きです)が、 Guiceを見てみようと思いました。

Guiceを使用してマップやリストなどをBeanに初期化する方法はありますか?

たとえば、Springで以前に次のことを行って、処理したいアイテムのリストをBeanに注入しました。

<property name="FilesToProcess">
   <list>
      <value>file1.xml</value>
      <value>file2.xml</value>
   </list>
</property>

Guiceでこれを行うにはどうすればよいですか?

4

3 に答える 3

6

Guice2 には MultiBindings と MapBindings があります。

https://github.com/google/guice/wiki/Multibindings

更新しました:

これをもう一度見てみると、実行時の値を Guice に、おそらく任意のオブジェクトとして注入する方法を知りたいと思われるかもしれません。

Guice は、すべてをタイプセーフ コードとして実行することに非常に重点を置いているため、これには自然には向いていません。Guice に入力を提供するために行ったことは、XML スキーマを作成し、jaxb を使用してこれを吸い込み、結果のオブジェクトを注入することです。

通常の古いプロパティを Guice 定数にバインドするための Names.bindProperties メソッドがあります。

Spring とのある程度の統合もありますので、こちらも参照してください。

于 2009-02-16T19:24:21.287 に答える
1

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;
    }
}
于 2009-02-16T19:45:12.347 に答える
1

ランタイム値については Dave Stenglein に同意します。

構成に特化したObixのようなフレームワークがあります。コード インジェクションには Guice が好きですが、構成インジェクションには Guice の方が適しています。

于 2009-02-18T16:23:41.750 に答える