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 将其吸入并注入结果对象。

有一个 Names.bindProperties 方法用于将常规旧属性绑定到 Guice 常量中。

还与 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 的代码注入,但它们更适合配置注入

于 2009-02-18T16:23:41.750 回答