2011-06-28 65 views
0

我有一個java程序,它使用了少量的.properties文件。它根據運行時傳遞的參數(模式)選擇要使用的屬性文件。 例如,當程序模式下運行:一個它使用a.properties文件,當模式B,它會使用b.properties文件等 我想所有這些屬性文件合併成一個common.properties,並且具有不同的名稱空間。例如,在common.properties我得:在java中過濾的屬性

a.url = aaa 
a.ip = aaa.aaa.aaa.aaa 
b.url = bbb 
b.ip = bbb.bbb.bbb.bbb 

現在,我實例屬性中的主要方法對象並將其傳遞到其他對象/方法是現在需要讀取來自properties.But東西我已經組合了我必須傳遞模式的屬性:a或b,以便他們知道它們應該提取的屬性集合。 有沒有更好的方法在主要方法中創建屬性文件的過濾實例,然後以這些對象不知道模式的方式將其傳遞給其他對象:a或b,然後只查詢屬性對象URL和IP(不a.url或a.ip)

回答

3

不要將Properties對象傳遞給其他方法/對象。它太低級了,尤其是現在你必須處理這個命名空間的事情。將這些屬性封裝在一個專用對象(讓我們稱之爲「配置」)中,並傳遞這個配置對象。

public class Configuration { 
    private String mode; 
    private Properties properties; 

    public Configuration(String mode, Properties properties) { 
     this.mode = mode; 
     this.properties = properties; 
    } 

    public String get(String key) { 
     return properties.getString(mode + "." + key); 
    } 
} 

你甚至可以提取該配置對象的合同到一個接口,使所有依賴對象,這個接口,而不是具體的配置類,這將有助於在

  • 更改配置策略上後來如果你想(如果你從一開始就這樣做了,你現在不需要改變所有對象中的任何東西)
  • 嘲笑單元測試中的配置,使它返回你想要的。
0

可以擴展Properties類,添加一個getter和setter爲活動命名,並重寫get()方法前面加上積極的命名空間,並調用super.get()方法。