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

发布于 2024-10-01 19:16:33 字数 341 浏览 4 评论 0原文

我想问一下有什么区别

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

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

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

谢谢,问候

马雷克

I would like to ask what's the difference between

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

and

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

I would like to load all my configuration properties with Names.bindProperties(binder(), prop); in my module and I discovered that it uses the latter one for binding properties.

Thanks, regards

Marek

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

少女七分熟 2024-10-08 19:16:33

我认为使用 bindConstant() 的原因是:

  • 它要求您使用带注释的绑定。您不能执行bindConstant().to(foo)。由于您绑定的类型是基元和 String,因此无注释绑定对它们中的任何一个都不太有意义。
  • 它需要更少的工作,因为您不必指定类型(顺便说一句,bindConstant()int 绑定到 Integer.class而不是 Integer.TYPE,不确定这是否重要)。

我认为 Names.bindProperties 不使用 bindConstant 只是因为它是内部代码,并且在进行绑定的过程中跳过一两个步骤就可以多一点代码。在您自己的模块中,我只使用 bindConstant 因为它简单且更清晰。

I think reasons to use bindConstant() are:

  • It requires that you use an annotated binding. You can't do bindConstant().to(foo). Since the types you bind with it are primitives and Strings, it's unlikely that an annotation-less binding would make sense for any of them.
  • It requires less effort since you don't have to specify the type (by the way, bindConstant() binds an int to Integer.class rather than Integer.TYPE, not sure if that matters).

I think Names.bindProperties doesn't use bindConstant just because it's internal code and a little more code is OK to skip a step or two in the process of making a binding. In your own modules, I'd just use bindConstant because it's easy and more clear.

无声情话 2024-10-08 19:16:33

bindConstant() 的好处是能够设置不同的原语,因为 Guice 本身预定义了 TypeConverter 实例。

以下面的绑定定义为例:

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

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

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

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

bindConstant() 的好处是可以发生类型转换。显式绑定 int 并不会给您带来那种奢侈。

bindConstant() has the benefit of being able to set different primitives because of predefined TypeConverter instances within Guice itself.

Take the following binding definition as an example:

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

Then in a class where you want the injection:

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

Guice will convert the bound String into an int for you. If it cannot, it will say so.

The benefit of bindConstant() is the type conversion that can happen. Explicitly binding an int does not give you that luxury.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文