繁体   English   中英

Guice可以初始化bean吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM