Question Guice: Différence entre Binder # bindConstant () et Binder # bind () ... toInstance


Je voudrais demander quelle est la différence entre

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

et

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

Je voudrais charger toutes mes propriétés de configuration avec Names.bindProperties (binder (), prop); dans mon module et j'ai découvert qu'il utilise le dernier pour les propriétés de liaison.

Merci, salutations

Marek


14
2017-11-12 14:16


origine


Réponses:


Je pense que des raisons d'utiliser bindConstant() sont:

  • Cela nécessite que vous utilisiez une liaison annotée. Vous ne pouvez pas faire bindConstant().to(foo). Puisque les types avec lesquels vous vous liez sont des primitives et Strings, il est peu probable qu'une liaison sans annotation ait du sens pour l'une d'entre elles.
  • Cela demande moins d’effort puisque vous n’avez pas à spécifier le type (au fait, bindConstant() lie un int à Integer.class plutôt que Integer.TYPE, je ne sais pas si cela compte).

je pense Names.bindProperties n'utilise pas bindConstant juste parce que c'est un code interne et un peu plus de code est OK pour sauter une étape ou deux dans le processus de création d'une liaison. Dans vos propres modules, je voudrais juste utiliser bindConstant parce que c'est facile et plus clair.


10
2017-11-12 16:12



bindConstant() a l'avantage de pouvoir définir différentes primitives en raison de TypeConverter instances au sein même du Guice.

Prenez la définition de liaison suivante comme exemple:

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

Puis dans une classe où vous voulez l'injection:

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

Guice va convertir la borne String dans un int pour toi. S'il ne peut pas, il le dira.

Le bénéfice de bindConstant() est la conversion de type qui peut arriver. Relier explicitement un int ne vous donne pas ce luxe.


3
2017-11-13 05:56