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
bindConstant()
has the benefit of being able to set different primitives because of predefinedTypeConverter
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 anint
for you. If it cannot, it will say so.The benefit of
bindConstant()
is the type conversion that can happen. Explicitly binding anint
does not give you that luxury.I think reasons to use
bindConstant()
are:bindConstant().to(foo)
. Since the types you bind with it are primitives andString
s, it's unlikely that an annotation-less binding would make sense for any of them.bindConstant()
binds anint
toInteger.class
rather thanInteger.TYPE
, not sure if that matters).I think
Names.bindProperties
doesn't usebindConstant
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 usebindConstant
because it's easy and more clear.