2015-10-05 25 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/