Java 初始化中加载变量的最佳实践是什么
我有一个java web应用程序,它需要在初始化时(即:当jboss服务器启动时)从外部文件读取信息 由于读取和解析此文本文件是一项昂贵的操作,我们决定只加载一次,然后将其设置为内存,以便可以在任何地方访问它(初始化后不需要修改变量) 我到处都读到应该避免使用全局变量,那么这种情况下的最佳实践是什么呢Java 初始化中加载变量的最佳实践是什么,java,Java,我有一个java web应用程序,它需要在初始化时(即:当jboss服务器启动时)从外部文件读取信息 由于读取和解析此文本文件是一项昂贵的操作,我们决定只加载一次,然后将其设置为内存,以便可以在任何地方访问它(初始化后不需要修改变量) 我到处都读到应该避免使用全局变量,那么这种情况下的最佳实践是什么呢 编辑:我应该提到信息应该存储在一个简单的列表变量中。DI,IoC容器。看看Guice,非常好的东西。DI,IoC容器。看看Guice,非常好的东西。DI,IoC容器。看看Guice,非常好的东西。
编辑:我应该提到信息应该存储在一个简单的列表变量中。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我认为这是一个全局只读变量,在初始化时只设置一次。这就是配置文件:-)全局变量的问题是您无法跟踪代码的哪一部分正在更改它,并且没有代码改变属性文件:-)事实上,我认为这些是不同的东西。配置文件不应只读取一次。是的