Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 初始化中加载变量的最佳实践是什么_Java - Fatal编程技术网

Java 初始化中加载变量的最佳实践是什么

Java 初始化中加载变量的最佳实践是什么,java,Java,我有一个java web应用程序,它需要在初始化时(即:当jboss服务器启动时)从外部文件读取信息 由于读取和解析此文本文件是一项昂贵的操作,我们决定只加载一次,然后将其设置为内存,以便可以在任何地方访问它(初始化后不需要修改变量) 我到处都读到应该避免使用全局变量,那么这种情况下的最佳实践是什么呢 编辑:我应该提到信息应该存储在一个简单的列表变量中。DI,IoC容器。看看Guice,非常好的东西。DI,IoC容器。看看Guice,非常好的东西。DI,IoC容器。看看Guice,非常好的东西。

我有一个java web应用程序,它需要在初始化时(即:当jboss服务器启动时)从外部文件读取信息

由于读取和解析此文本文件是一项昂贵的操作,我们决定只加载一次,然后将其设置为内存,以便可以在任何地方访问它(初始化后不需要修改变量)

我到处都读到应该避免使用全局变量,那么这种情况下的最佳实践是什么呢


编辑:我应该提到信息应该存储在一个简单的列表变量中。

DI,IoC容器。看看Guice,非常好的东西。

DI,IoC容器。看看Guice,非常好的东西。

DI,IoC容器。看看Guice,非常好的东西。

DI,IoC容器。看看Guice,非常好的东西。

全局可访问的静态配置对象非常常见。您可以使用单例模式来访问配置。可能是这样的:

public class Config {
    private static Config myInstance;

    private Config() {
        // Load the properties
    }

    public static getInstance() {
        if (myInstance == null) {
            myInstance = new Config();
        }

        return myInstance;
    }

    public String getConfigPropertyBla()

    ...
} 

如果使用Spring,可以让Spring将属性加载到Bean中。然后,您可以通过应用程序中任何地方的自动连接来访问Bean。我个人认为,这是一个非常好的解决方案。

全局可访问的静态配置对象非常常见。您可以使用单例模式来访问配置。可能是这样的:

public class Config {
    private static Config myInstance;

    private Config() {
        // Load the properties
    }

    public static getInstance() {
        if (myInstance == null) {
            myInstance = new Config();
        }

        return myInstance;
    }

    public String getConfigPropertyBla()

    ...
} 

如果使用Spring,可以让Spring将属性加载到Bean中。然后,您可以通过应用程序中任何地方的自动连接来访问Bean。我个人认为,这是一个非常好的解决方案。

全局可访问的静态配置对象非常常见。您可以使用单例模式来访问配置。可能是这样的:

public class Config {
    private static Config myInstance;

    private Config() {
        // Load the properties
    }

    public static getInstance() {
        if (myInstance == null) {
            myInstance = new Config();
        }

        return myInstance;
    }

    public String getConfigPropertyBla()

    ...
} 

如果使用Spring,可以让Spring将属性加载到Bean中。然后,您可以通过应用程序中任何地方的自动连接来访问Bean。我个人认为,这是一个非常好的解决方案。

全局可访问的静态配置对象非常常见。您可以使用单例模式来访问配置。可能是这样的:

public class Config {
    private static Config myInstance;

    private Config() {
        // Load the properties
    }

    public static getInstance() {
        if (myInstance == null) {
            myInstance = new Config();
        }

        return myInstance;
    }

    public String getConfigPropertyBla()

    ...
} 

如果使用Spring,可以让Spring将属性加载到Bean中。然后,您可以通过应用程序中任何地方的自动连接来访问Bean。我个人认为,这是一个非常好的解决方案。

这在很大程度上取决于您使用的框架。一般来说,您是对的,全局变量通常被视为反模式。但是你必须理解原因,主要是可测试性

为了测试“全局”事物,您通常使用工厂、提供者等模式,并经常结合依赖注入(例如Spring、Guide)

最后,您正在缓存。对于缓存,您还可以使用一些框架,如EHCache。但这对你来说可能太多了

为了保持它的简单和纯Java,我建议这样做(只是初稿,未经测试):


}这在很大程度上取决于您使用的框架。一般来说,您是对的,全局变量通常被视为反模式。但是你必须理解原因,主要是可测试性

为了测试“全局”事物,您通常使用工厂、提供者等模式,并经常结合依赖注入(例如Spring、Guide)

最后,您正在缓存。对于缓存,您还可以使用一些框架,如EHCache。但这对你来说可能太多了

为了保持它的简单和纯Java,我建议这样做(只是初稿,未经测试):


}这在很大程度上取决于您使用的框架。一般来说,您是对的,全局变量通常被视为反模式。但是你必须理解原因,主要是可测试性

为了测试“全局”事物,您通常使用工厂、提供者等模式,并经常结合依赖注入(例如Spring、Guide)

最后,您正在缓存。对于缓存,您还可以使用一些框架,如EHCache。但这对你来说可能太多了

为了保持它的简单和纯Java,我建议这样做(只是初稿,未经测试):


}这在很大程度上取决于您使用的框架。一般来说,您是对的,全局变量通常被视为反模式。但是你必须理解原因,主要是可测试性

为了测试“全局”事物,您通常使用工厂、提供者等模式,并经常结合依赖注入(例如Spring、Guide)

最后,您正在缓存。对于缓存,您还可以使用一些框架,如EHCache。但这对你来说可能太多了

为了保持它的简单和纯Java,我建议这样做(只是初稿,未经测试):


}

事实上,我认为这是不同的事情。配置文件不应只读取一次。如果您只需更改它,服务器就会再次读取它并执行更改,从而最大限度地减少停机时间,这会更好。这与使用任何方法和类都可以更改且无法跟踪的全局变量完全不同。全局只读变量(如常量)不错。它们很好。:-)如果您拥有Web应用程序的属性,请考虑使用JNDI定义它们。war中的属性文件可以很好地定义静态值或可以覆盖的属性,但定义任何类型的配置都不太好。JNDI将允许您以动态方式在外部定义属性。@Leo我认为这是一个全局只读变量,在初始化时只设置一次。这就是配置文件:-)全局变量的问题是您无法跟踪代码的哪一部分正在更改它,并且没有代码改变属性文件:-)事实上,我认为这些是不同的东西。配置文件不应只读取一次。是的