[英]Can Guice initialize beans?
我之前使用过Spring(并且喜欢它),但是我想看看Guice 。
有没有办法使用Guice将地图或列表等内容初始化为bean?
例如,我在Spring之前完成了以下操作,以便将我想要处理的项目列表注入到某个bean中。
<property name="FilesToProcess">
<list>
<value>file1.xml</value>
<value>file2.xml</value>
</list>
</property>
我怎么能在Guice这样做?
Guice2有MultiBindings和MapBindings,它们应该适合你。
https://github.com/google/guice/wiki/Multibindings
更新:
再看一遍之后,似乎您可能会问如何将运行时值注入Guice,可能是作为任意对象。
Guice非常专注于将所有内容都作为类型安全的代码,所以它并不适合这一点。 我为Guice提供输入所做的就是创建一个XML模式并使用jaxb来填充它并注入生成的对象。
有一个Names.bindProperties方法,用于将常规旧属性绑定到Guice常量。
与Spring有一定程度的集成,所以你可能也想看看这个。
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;
}
}
我同意Dave Stenglein的运行时值。
像Obix这样的框架专门用于配置。 我喜欢Guice 代码注入 ,但它们对于配置注入更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.