Guice可以初始化bean吗?

时间:2009-02-16 19:00:50

标签: java dependency-injection inversion-of-control guice

我之前使用过Spring(并且喜欢它),但我想我会看一下Guice

有没有办法使用Guice将地图或列表等内容初始化为bean?

例如,我之前在Spring中完成了以下操作,将我想要处理的项目列表注入到某个bean中。

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

我怎样才能在Guice中这样做?

3 个答案:

答案 0 :(得分:6)

Guice2有MultiBindings和MapBindings,它们应该适合你。

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

更新:

再看一遍之后,似乎您可能会问如何将运行时值注入Guice,可能是任意对象。

Guice非常专注于将所有内容都作为类型安全的代码,所以它不适合自己 自然而然。我为Guice提供输入所做的就是创建一个XML模式,并使用jaxb将其吸入并注入生成的对象。

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

与Spring有一定程度的集成,所以你可能希望将其视为 好。

答案 1 :(得分:2)

Guice允许您注入类型文字。语法有点奇怪。有一个blog entry可以解释原因。

绑定看起来像这样:

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;
    }
}

答案 2 :(得分:1)

我同意Dave Stenglein的运行时值。

Obix这样的框架专门用于配置。我喜欢Guice的代码注入,但它们更适合配置注入