簡體   English   中英

使用屬性文件中的屬性* AS中的AS *靜態最終變量

[英]use properties from property files *AS* static final variables in java

如何使用屬性文件在我的應用程序中存儲全局變量,還使用公共靜態最終變量將它們注入應用程序?

看看這個問題 ,我希望找到一種方法,我可以從屬性文件中將靜態最終變量注入應用程序。 我感到很失望,但最終發現了一種方法,我可以吃蛋糕並吃掉它。

我在下面發布這個解決方案,以添加到SO的綱要...

我的解決方案涉及全局變量的概念( 顯然很糟糕 ),所以如果你不是佯裝心臟,那么請繼續閱讀。

我相信盡管我們希望所有人都遵循函數式編程的熱潮並從函數中刪除所有“拉”依賴的概念,但有些事實需要絕對基礎,因此需要以全局變量的形式提供一些事實來源。在運行時應用程序中實際上很有用。 但我不想開始一場火焰戰......

  1. 從名為Globals的公共類開始(或類似的東西)

  2. 要從屬性文件中注入屬性,您需要建立屬性文件的基本名稱(或位置),例如"com.example.myapp.core.configuration"可能表示核心模塊中的配置文件,其中包含jar:file:C:/jars/myapp.ear/core.jar!/com/example/myapp/core/configuration.properties的物理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"; 
  3. 然后將屬性鍵定義為私有變量(用於封裝),例如

     private static final String DOMAIN_PACKAGE_KEY = "myapp.domain.package.name"; 
  4. 然后將屬性自己定義為公共最終靜態變量,如下所示:

     public static final String DOMAIN_PACKAGE; //we leave it uninitialized on purpose. 
  5. 上面的代碼在構建時會拋出編譯錯誤,所以我們需要使用靜態塊初始化它。 要做到這一點,我們必須首先使用我們定義的基本名稱檢索資源包:

     static { ResourceBundle bundle = PropertyResourceBundle(CORE_CONFIGURATION_BASENAME); ... } 
  6. 然后我們使用我們定義的鍵分配最終屬性:“

     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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM