2010-05-28 31 views
1

參考Guice's custom injections文章,其TypeListener對InjectLogger.class註釋執行檢查 - 可以是可選的。刪除該檢查將注入到所有Logger.class類型。自動注入記錄器與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)); 
     } 
     } 
    } 
    } 

我很想從聽者去掉 「& & field.isAnnotationPresent(InjectLogger.class)」。

如果我們使用Guice來注入記錄器的所有實例,是否有任何理由不自動執行(不需要註釋)?

回答

3

我不知道爲什麼你不想註釋的程序正確性的原因。

我確實認爲你不想自動注入代碼清晰。依賴注入可以對它有一點'魔力'的感覺,註釋有助於澄清這種魔法並幫助開發人員理解正在發生的事情。本質上,就像變量類型一樣,DI註釋對於開發人員來說,與編譯器/解釋器一樣多。

所有的說法,我認爲如果你不打算爲你的日誌類註釋,這不是一個大問題。大多數開發人員並不認爲伐木工人有很多,他們只是使用它們(至少這是我的經驗)。所以在這種情況下,它可能是相對無害的。