2009-02-16 84 views
4

我之前使用过Spring(并喜欢它),但我想我会看看Guice可以Guice初始化bean吗?

有没有一种方法可以使用Guice来初始化类似地图或列表的东西?例如,我在Spring之前完成了以下操作,将我想要处理的项目列表注入到某个bean中。

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

我该如何在Guice中做到这一点?

回答

6

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

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

更新时间:

在此再次寻找后,似乎你可能会问你如何注入运行值到吉斯,也许任意对象。

Guice非常专注于做所有类型安全的代码,所以它不会自然地将 放在这里。我为Guice提供的输入是创建一个XML模式并使用jaxb将其吸入并注入结果对象。

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

还有一些与Spring的集成水平,所以你可能想把它当作 。

+0

谢谢!您的更新完全回答了我的问题。 – Vinnie 2009-02-19 16:50:02

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

我与戴维Stenglein同意了运行时的值。

有框架,如Obix专门在配置。我很喜欢Guice 代码注入,但是它们更适合配置注入