2010-05-28 7 views
1

En référence à l'article Guice's custom injections, son TypeListener vérifie l'annotation InjectLogger.class, qui peut être facultative. Supprimer cette vérification injectera à tous les types Logger.class.Enregistreur d'injection automatique avec guice

class Log4JTypeListener implements TypeListener { 
    public <T> void hear(TypeLiteral<T> typeLiteral, TypeEncounter<T> typeEncounter) { 
     for (Field field : typeLiteral.getRawType().getDeclaredFields()) { 
     if (field.getType() == Logger.class 
      && field.isAnnotationPresent(InjectLogger.class)) { 
      typeEncounter.register(new Log4JMembersInjector<T>(field)); 
     } 
     } 
    } 
    } 

Je suis tenté d'enlever "& & field.isAnnotationPresent (InjectLogger.class)" de l'auditeur.

Si nous utilisons Guice pour injecter toutes les instances de notre Logger, y a-t-il une raison de ne pas le faire automatiquement (sans besoin d'annoter)?

Répondre

3

Je ne connais aucune raison d'exactitude programmatique pour laquelle vous ne voudriez pas annoter.

Je pense que vous ne voudriez pas injecter automatiquement pour la clarté du code. L'injection de dépendances peut avoir un aspect «magique», les annotations aident à clarifier la magie et aident les développeurs à comprendre ce qui se passe. Essentiellement, comme un type pour une variable, une annotation DI est autant pour le développeur que pour le compilateur/interpréteur. Tout cela étant dit, je pense que si vous n'alliez pas annoter pour vos classes de journalisation, ce n'est pas une grosse affaire. La plupart des développeurs ne pensent pas beaucoup aux bûcherons, ils les utilisent simplement (du moins c'est mon expérience). Donc, dans ce cas, il serait probablement relativement inoffensif.