2012-08-07 68 views
3

我有2個靜態初始化嘗試呼叫對方:解決圓形靜態參考

  • 一個在一個配置類,讀取從屬性配置參數文件;
  • 一個在LoggerFactory類中,它設置了默認的日誌記錄參數。

問題是他們相互引用:

  • 配置類需要記錄器讀取屬性文件時,記錄潛在的I/O問題。
  • LoggerFactory需要配置文件來設置日誌文件名稱,日誌模式和默認日誌級別。

這顯然是不正確的,我在這裏和那裏得到一些NPE。

有沒有處理這種情況的標準方式?

+4

使用不需要配置的默認記錄器,並在加載可配置記錄器時進行替換。 – oldrinb 2012-08-07 23:43:05

+0

靜態初始化器通常是一個壞主意。你應該看看某種依賴注入。 – 2012-08-07 23:47:55

+2

@JimGarrison我會和DI有同樣的問題,不是嗎? – assylias 2012-08-07 23:49:19

回答

3

使用不需要配置的默認記錄器,並在加載可配置記錄器時進行替換。通過這種方式,您可以通過簡單的方式輕鬆解決循環依賴問題。

1

您可以分開記錄器的配置,並在配置類之前進行初始化。儘管這並不理想,但我已經在幾個項目中看到了這一點。

1

您應該創建一個記錄器,該記錄器在程序啓動時加載,但之後在創建記錄器時可以覆蓋該記錄器。