Авто впрыскивая логгер с хитростью - PullRequest
1 голос
/ 28 мая 2010

Применительно к статье пользовательских инъекций , его TypeListener выполняет проверку для аннотации InjectLogger.class - которая может быть необязательной. При удалении этой проверки будут введены все типы Logger.class.

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));
        }
      }
    }
  }

Я испытываю желание удалить " && field.isAnnotationPresent (InjectLogger.class) " из слушателя.

Если мы используем Guice для внедрения всех экземпляров нашего Logger, есть ли причина не делать это автоматически (без необходимости комментировать)?

1 Ответ

3 голосов
/ 28 мая 2010

Я не знаю ни одной программной причины правильности, почему вы не хотели бы комментировать.

Я думаю, вы не захотите делать инъекции автоматически для ясности кода. Внедрение зависимостей может показаться «волшебным», аннотации помогают прояснить магию и помогают разработчикам понять, что происходит. По сути, как и тип переменной, аннотация DI для разработчика так же важна, как и для компилятора / интерпретатора.

При всем этом, я думаю, если бы вы не собирались комментировать свои классы журналирования, это не так уж и сложно. Большинство разработчиков не думают о регистраторах, они просто используют их (по крайней мере, это был мой опыт). Так что в этом случае это, вероятно, будет относительно безвредным.

...