Guice:Binder#bindConstant()和Binder#bind()... toInstance之间的区别

时间:2010-11-12 14:16:41

标签: java constants config guice

我想问一下

之间有什么区别
bindConstant().annotatedWith(Names.named("keepAliveInterval")).to(60);

bind(Integer.TYPE).annotatedWith(Names.named("keepAliveInterval")).toInstance(60);

我想用Names.bindProperties(binder(),prop)加载我的所有配置属性;在我的模块中,我发现它使用后者来绑定属性。

谢谢,问候

马立克

2 个答案:

答案 0 :(得分:10)

我认为使用bindConstant()的理由是:

  • 它要求您使用带注释的绑定。你做不到bindConstant().to(foo)。由于与它绑定的类型是基元和String s,因此无注释绑定对它们中的任何一个都没有意义。
  • 由于您不必指定类型,因此需要更少的工作量(顺便说一下,bindConstant()int绑定到Integer.class而不是Integer.TYPE,不确定如果那很重要。)

我认为Names.bindProperties不使用bindConstant只是因为它是内部代码,而在编写绑定过程中可以跳过一两步就可以了。在你自己的模块中,我只使用bindConstant,因为它很简单,更清晰。

答案 1 :(得分:3)

由于Guice本身内部预定义的bindConstant()实例,

TypeConverter的好处是能够设置不同的原语。

以下面的绑定定义为例:

bindContant().annotatedWith(@Names.named("c")).to("30");

然后在你想要注射的课程中:

@Inject @Named("c") int value;

Guice会将绑定的String转换为int。如果不能,就会这样说。

bindConstant()的好处是可能发生的类型转换。明确约束int不会给你带来奢侈。