用guice自动注射记录器

时间:2010-05-28 11:12:49

标签: java guice

参考Guice's custom injections文章,其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));
        }
      }
    }
  }

我很想从听众中删除“&amp;&amp; field.isAnnotationPresent(InjectLogger.class)”。

如果我们使用Guice注入Logger的所有实例,是否有任何理由不自动执行(无需注释)?

1 个答案:

答案 0 :(得分:3)

我不知道您不想注释的任何程序正确性原因。

我认为你不想为了代码清晰而自动注入。依赖注入可以有一点'神奇'的感觉,注释有助于澄清魔术并帮助开发人员理解正在发生的事情。本质上,就像变量的类型一样,DI注释对于开发人员来说与编译器/解释器一样多。

所有这一切,我想如果你不打算注释你的日志记录类并不是什么大不了的事。大多数开发人员对记录器不太了解,他们只是使用它们(至少这是我的经验)。所以在这种情况下它可能会相对无害。