我之前使用过Spring(并且喜欢它),但我想我会看一下Guice。
有没有办法使用Guice将地图或列表等内容初始化为bean?
例如,我之前在Spring中完成了以下操作,将我想要处理的项目列表注入到某个bean中。
<property name="FilesToProcess">
<list>
<value>file1.xml</value>
<value>file2.xml</value>
</list>
</property>
我怎样才能在Guice中这样做?
答案 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的代码注入,但它们更适合配置注入。