Guice:Binder#bindConstant() 和 Binder#bind() 之间的区别 ...到实例

2022-09-03 15:02:25

我想问一下

bindConstant().annotatedWith(Names.named("keepAliveInterval")).to(60);

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

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

谢谢,问候

马立克


答案 1

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

  • 它要求您使用带批注的绑定。你不能做.由于与它绑定的类型是基元和 s,因此无批注绑定不太可能对其中任何一个都有意义。bindConstant().to(foo)String
  • 它需要更少的努力,因为您不必指定类型(顺便说一句,将一个绑定到而不是,不确定这是否重要)。bindConstant()intInteger.classInteger.TYPE

我认为不要仅仅因为它是内部代码而使用,并且在进行绑定的过程中跳过一两个步骤可以多一点代码。在你自己的模块中,我只是使用,因为它很容易,更清晰。Names.bindPropertiesbindConstantbindConstant


答案 2

bindConstant()具有能够设置不同基元的好处,因为Guice本身具有预定义的实例。TypeConverter

以下绑定定义为例:

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

然后在你想要注入的类中:

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

Guice 会将绑定转换为 a for you。如果它不能,它就会这么说。Stringint

的好处是可能发生的类型转换。明确绑定 a 不会给你带来这种奢侈。bindConstant()int


推荐