2017-02-06 47 views
0

因此,我正在構建一個EAR的實用JAR,並且我有一個類提供需要XML字符串的靜態方法。我嵌入一個XML文件在我的JAR資源,我在靜態塊在類的初始化時間閱讀:我應該在靜態初始化塊中獲取資源嗎?

static{ 
    try { 
     base = IOUtils.toString(CartSessionFactory.class.getResourceAsStream("/createcartTemplate.xml")); 
     if(base==null){ 
      throw new Exception("createcartTemplate.xml not found as a resource"); 
     } 
     //check the file correctness 
     //[...] 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

一位同行的編碼告訴我,他在該設計嚇壞了,但不能解釋清楚爲什麼(但建議改爲使用Singleton)。它似乎工作,但。這是不好的設計,爲什麼?

+0

如果'base == null'會發生什麼?在這之後,這個塊被執行了嗎?第一次有人試圖使用'base'會發生什麼? –

+0

與資源加載無關,但您應該關心的一件事是'if':Java爲了避免意大利麪代碼而沒有'goto'功能。如果你故意拋出一個被外層'try'捕獲的異常(並且被忽略),它會和'goto'具有相同的行爲,這是一個強烈的阻止做法。 – BackSlash

+0

「,但建議改爲使用單例」他能給出一個很好的理由嗎? –

回答

0

我會注入這個依賴到類中,而不是硬編碼到它。 測試這個模塊並不像注入資源那麼簡單。

+0

你能更具體嗎關於依賴注入?你會如何在課堂上爲文件注入依賴性? –