如何使用属性文件在应用程序中存储全局变量,又如何使用公共静态最终变量将它们注入应用程序中?
看了这个问题,我希望找到一种方法,可以将我的静态最终变量从属性文件注入到应用程序中。让我失望的是我,但最终找到了一种方法,让我也可以吃蛋糕。
我在下面发布此解决方案以添加到SO的纲要中...
我的解决方案涉及到全局变量(显然是不好的)的概念,因此,如果您不心虚,请继续阅读。
我相信,尽管我们都希望遵循函数式编程的热潮,并从函数中删除所有“拉出”依赖项的概念,但是有些真理需要绝对基础,因此,一些全局变量形式的真理来源在运行时应用程序中实际上是有帮助的。但我不想发火焰...
从一个名为Globals的公共类开始(或类似这样的显而易见的东西)
要从属性文件中注入属性,您需要建立属性文件的基本名称(或位置),例如,"com.example.myapp.core.configuration"
可以在您的核心模块中以物理url表示配置文件jar:file:C:/jars/myapp.ear/core.jar!/com/example/myapp/core/configuration.properties
。将此基本名称设置为静态最终变量:
public static final String CORE_CONFIGURATION_BASENAME = "com.example.myapp.core.configuration";
然后将属性键定义为私有变量(用于封装),例如
private static final String DOMAIN_PACKAGE_KEY = "myapp.domain.package.name";
然后将其自身定义为公共最终静态变量,如下所示:
public static final String DOMAIN_PACKAGE; //we leave it uninitialized on purpose.
上面的代码在构建时会引发编译器错误,因此我们需要使用static块对其进行初始化。为此,我们必须首先使用我们定义的基本名称检索资源束:
static {
ResourceBundle bundle = PropertyResourceBundle(CORE_CONFIGURATION_BASENAME);
...
}
然后我们使用定义的键来分配最终属性:”
static {
ResourceBundle bundle = PropertyResourceBundle(CORE_CONFIGURATION_BASENAME);
DOMAIN_PACKAGE = bundle.getString(DOMAIN_PACKAGE_KEY);
}
在那里,您拥有了它。这将在加载Globals类时初始化,因此,如果您使用值更改配置属性,并希望它们反映在您的应用程序中,则需要重新启动应用程序以强制类加载器重新加载该类。
现在总共:
package com.example.myapp.core.util;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
public class Globals {
public static final String CORE_CONFIGURATION_BASENAME = "com.example.myapp.core.configuration";
private static final String DOMAIN_PACKAGE_KEY = "myapp.domain.package.name";
public static final String DOMAIN_PACKAGE; //we leave it uninitialized on purpose.
static {
ResourceBundle bundle = PropertyResourceBundle(CORE_CONFIGURATION_BASENAME);
DOMAIN_PACKAGE = bundle.getString(DOMAIN_PACKAGE_KEY);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句