2015-10-05 39 views
3

在Java應用程序和類可見性函數中讀出系統環境的最佳方式是什麼?Java - 在啓動過程中讀出系統環境

我需要os.name,並設計像

private String osName; 

private void readSystemSettings() { 
    osName = System.getProperty("os.name"); 
} 

public void printSystemSettings() { 
    System.out.println(this.osName); 
    ... 
} 

public SystemEnvironment() { 
    readSystemSettings();  
} 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
} 
  1. 什麼是獲得這些信息的最佳實踐課嗎? 始終在啓動時或只是不時地調用此功能?

  2. 我想在類實例化後立即讀出這些信息。因此,構造函數調用readSystemSettings()函數。

由於這是信息將永遠在運行時相同,我其實只需要沒有立場。意味着所有的變量+函數應該是最終的。或者我錯了?

  1. 如果2)是正確的理解,該怎麼辦?
+0

這屬於代碼審查... –

回答

3

您可以將所有變量都標記爲final的類,然後在靜態塊中進行初始化。

public class SystemProperties{ 

    public static final String OS_NAME; 
    // other properties 

    static{ 
    OS_NAME = System.getProperty("os.name"); 
    // initialize other properties 

    } 

} 

否則,如果你像Spring或EJB託管環境的時候,你可以標記SystemPropertiessingleton,並與@PostContruct註釋的方法初始化變量。

public class SystemProperties{ 

    public static String OS_NAME; 
    // other properties 

    @PostConstruct 
    private void init(){ 
    OS_NAME = System.getProperty("os.name"); 
    // initialize other properties 

    } 

} 
0

你可以使用一個工具類:

public final class Utilities { 

    public static final String OS_NAME = System.getProperty("os.name"); 

    private Utilities() { } // utility classes can't be instantiated 

} 

這樣,此屬性將只初始化一次,你的應用程序在啓動過程中。然後,您可以使用Utilities.OS_NAME從代碼中的任何地方訪問此屬性。

0

由於該值全局設置,你可以做

enum SystemEnvironment { 
    ; 
    public static final String OS_NAME = System.getProperty("os.name"); 

,或者你可以爲每一個你不應該經常調用它看起來TI起來。

enum SystemEnvironment { 
    ; 
    public static getOsName() { 
     return System.getProperty("os.name"); 
    } 

如果您經常使用它,我建議您爲它創建一些測試。

enum SystemEnvironment { 
    ; 
    public static final boolean IS_WINDOWS = getOsName().startsWith("Window"); 
    public static getOsName() { 
     return System.getProperty("os.name"); 
    } 
0

您可以使用OWNER庫。

OWNER API是一個Java庫,其目標是最小化通過Java屬性文件處理應用程序配置所需的代碼。

所以加載屬性,你應該創建一流這樣

public interface MyConfig extends Config { 
    @Key("os.name") 
    String osName(); 
} 

然後你就可以在需要加載配置:

ServerConfig cfg = ConfigFactory.create(MyConfig.class, 
     System.getProperties(), 
     System.getenv() 
); 
System.out.println("Os name:" + cfg.osName()); 

欲瞭解更多信息,您可以看到文檔http://owner.aeonbits.org/docs/usage/

相關問題