如何使用属性文件在应用程序中存储全局变量,同时使用公共静态最终变量将它们注入应用程序?
看过这个问题后,我希望找到一种方法,可以从属性文件将静态final变量注入到应用程序中。我很失望,但最终找到了一个鱼与熊掌兼得的方法。
我在下面张贴这个解决方案,以添加到简编所以...
我的解决方案涉及全局变量的概念(这显然是不好的),所以如果你不是假装的心,那么继续读下去。
我认为,尽管我们都希望追随函数编程的热潮,并从函数中去除所有“拉动”依赖关系的概念,但有些真理需要绝对的基础,因此在运行时应用程序中以全局变量的形式提供一些真理的来源实际上是有帮助的。但我不想挑起火焰战...
>
从一个名为Globals的公共类开始(或类似这样的明显内容)
要从属性文件中注入属性,需要建立属性文件的基名(或位置),例如,“com.example.myapp.core.configuration”
可能表示核心模块中的配置文件,其物理url为jar:file:c:/jars/myapp.ear/core.jar!/com/example/myapp/core/configuration.properties
。将此basename设置为静态final变量:
public static final String CORE_CONFIGURATION_BASENAME = "com.example.myapp.core.configuration";
然后将属性键定义为私有变量(用于封装),例如。
private static final String DOMAIN_PACKAGE_KEY = "myapp.domain.package.name";
然后将属性themself定义为公共最终静态变量,如下所示:
public static final String DOMAIN_PACKAGE; //we leave it uninitialized on purpose.
上面的代码在构建时会抛出一个编译器错误,所以我们需要使用静态块初始化它。为此,我们必须首先使用我们定义的basename检索资源包:
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);
}
}
问题内容: 我为该标题表示歉意。我找不到更好的方法来解释这种情况。 我使用URL http://www.exampledepot.com/egs/java.util/Props.html中所述的Property类加载属性文件。 我的问题是我可以在该属性文件中使用属性吗? 例: test.properties 其他语法有可能吗? 谢谢 问题答案: 以前从未见过。您当然 可以 制作自己的预处理器。只要
问题内容: 从属性文件中为最终属性进行Spring注入的一个简单问题。 我有一个属性文件,要在其中存储文件路径。通常,当我使用属性文件时,我会使用类似以下的方法来设置类属性: 然后在我spring.xml我会像这样: 这很好用,很简单,并且使代码简洁美观。但是我不确定在尝试将属性值注入最终类属性时使用的最整洁的模式是什么? 显然是这样的: 不管用。还有另一种方法吗? 问题答案: 将值注入最终字段的
问题内容: 关于从属性文件中为最终属性进行Spring注入的一个简单问题。 我有一个属性文件,要在其中存储文件路径。通常,当我使用属性文件时,我会使用类似以下的方法来设置类属性: 然后在我spring.xml我会像这样: 这样效果很好,很简单,并且使代码更简洁。但是我不确定在尝试将属性值注入最终类属性时使用的最整洁的模式是什么? 显然是这样的: 不管用。还有另一种方法吗? 问题答案: 如果您正在寻
问题内容: 我正在尝试将以下Objective-C代码转换为Swift。在我的Objective-C代码中,有一个静态变量,可以从类方法中对其进行访问。 由于您无法从Swift的类函数中访问像这样声明的类型,因此我为此创建了一个存储属性。 我试图从这样的类函数中对其调用方法。 但是我得到这个错误 类型’[AnyObject]’的不可变值仅具有名为’removeAll’的变异成员 。 谁能告诉我此错
我有一个实用工具类,其中我有一个方法,它需要用户名和密码来连接其他URL。我需要将用户名保存在属性文件中,这样我就可以随时更改它。但当我在静态方法中使用它(作为实用程序类)时,问题是它显示为空(即它不能从属性文件中读取)。 但当我在其他控制器中输入这些值时,它们就会到达那里。所以我的问题是如何读取静态字段中的属性值
问题内容: 如果我尝试序列化静态属性会怎样? 谢谢 问题答案: 从这篇文章: 提示1:处理静态变量 Java类通常在静态类变量中包含一些全局相关的值。我们不会进入有关全局变量是否适当的争论的悠久历史- 只能说程序员继续发现它们有用,而纯粹主义者建议的替代方案并不总是可行的。 对于声明时初始化的静态变量,序列化不会出现任何特殊问题。第一次使用该类时,相关变量将设置为正确的值。 某些静态无法通过这种方