在java中将属性文件*中的属性用作*静态最终变量

在java中将属性文件*中的属性用作*静态最终变量,java,properties,code-injection,Java,Properties,Code Injection,如何使用属性文件在应用程序中存储全局变量,同时使用公共静态最终变量将它们注入应用程序 看看,我希望找到一种方法,可以将静态最终变量从属性文件注入到应用程序中。我感到失望,但最终找到了一种方法,我可以吃我的蛋糕,也可以吃它 我在下面发布此解决方案是为了将其添加到SO…的概要中。我的解决方案涉及全局变量()的概念, 所以,如果你不是假装的,那就继续读下去 我相信,尽管我们都想追随函数式编程的狂热 从我们的函数中删除所有“拉式”依赖的概念,有一些事实是 需要绝对的基础,因此需要一些全局变量形式的真理来

如何使用属性文件在应用程序中存储全局变量,同时使用公共静态最终变量将它们注入应用程序

看看,我希望找到一种方法,可以将静态最终变量从属性文件注入到应用程序中。我感到失望,但最终找到了一种方法,我可以吃我的蛋糕,也可以吃它


我在下面发布此解决方案是为了将其添加到SO…

的概要中。我的解决方案涉及全局变量()的概念, 所以,如果你不是假装的,那就继续读下去

我相信,尽管我们都想追随函数式编程的狂热 从我们的函数中删除所有“拉式”依赖的概念,有一些事实是 需要绝对的基础,因此需要一些全局变量形式的真理来源 在运行时中,应用程序实际上是有用的。但我不想发动一场火焰战

解决方案
  • 从一个名为Globals的公共类开始(或者类似的东西)

  • 要从属性文件中插入属性,需要建立 属性文件,例如,
    “com.example.myapp.core.configuration”
    可能表示配置 核心模块中的文件,物理url为
    jar:file:C:/jars/myapp.ear/core.jar/com/example/myapp/core/configuration.properties
    。 将此basename设置为静态最终变量:

    public static final String CORE_CONFIGURATION_BASENAME = "com.example.myapp.core.configuration";
    
  • 然后将属性键定义为私有变量(用于封装),例如

  • 然后将属性themself定义为公共最终静态变量,如下所示:

    public static final String DOMAIN_PACKAGE; //we leave it uninitialized on purpose.
    
  • 上面的代码在构建时会抛出一个编译器错误,因此我们需要使用静态块对其进行初始化。 为此,我们必须首先使用我们定义的basename检索资源束:

    static {
        ResourceBundle bundle = PropertyResourceBundle(CORE_CONFIGURATION_BASENAME);
        ...
    }
    
  • 然后,我们使用定义的键指定最终属性:

  • 这将在加载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);
        }
    }
    

    请先为您的问题添加更多详细信息。不要只链接其他问题。谢谢,我已将此帖子编辑为更具问题性:)
    static {
        ResourceBundle bundle = PropertyResourceBundle(CORE_CONFIGURATION_BASENAME);
        DOMAIN_PACKAGE = bundle.getString(DOMAIN_PACKAGE_KEY);
    }
    
    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);
        }
    }