2016-11-03 5 views
1

Java Webアプリケーションでは、プロパティ・ファイルに格納されている資格証明を必要とする静的メソッドを持つクラスがいくつかあります。私は、好ましい方法は、プロパティの値を取得するためであると思いまし静的ブロックとコンテキスト・パラメータのプロパティ・ファイル値の設定

ファイル:

  1. 静的ブロック - プロパティファイルから読み込み、クラスとして適切な資格情報を設定し、クラスでstaticブロックを持っています変数。
  2. コンテキストパラメータ - ContextListenerのプロパティファイルから読み取り、コンテキストパラメータに値を設定します。

利点は(1)私がそれらを呼び出すたびに静的メソッドに資格情報を渡す必要がないことです。これは冗長です。

(1)の欠点は、私が同じプロパティファイルから何度も読んでいることです。

(場合について逆の利点/欠点(2))

+0

代わりに、あなたはまた、ちょうどそのような静的初期化子で初期化されているパブリック静的フィールドを持っているだろうか? – Thilo

+0

私はそのようなファイルをいくつか持っています...私はそれを公開変数にすることができると思います。それはあなたが示唆していることですか? – theyuv

+0

アプリケーション全体で多くのクラスからアクセスする必要がある設定値がある場合は、すばやくパブリックゲッターまたはフィールドとして提供することです。 – Thilo

答えて

0

静的ブロック:コードのブロック「{}」コンストラクタ又は主に一度だけ実行され、それが最初に実行されます(クラスの初期化時にこれを呼び出します)Reference.

"同じプロパティファイルから何度も読んでいます。"。なぜ、どのように?

+0

Re: "なぜ?":プロパティファイルにある値を利用する必要があるファイルがいくつかあるため – theyuv

1

通常、シングルトンパターンは避けられますが、ここからすべてのプロパティにアクセスすることができます。また、それだけで不変の状態を持つことになりますので、私はここにシングルトンを使用しても大丈夫だと思います:

public final class MyProperties { 
    private final Properties properties; 

    private MyProperties(){ 
     properties = new Properties(); 
     properties.load(...); // Load your properties here and maybe do some checks 
    } 

    public static final MyProperties INSTANCE = new MyProperties(); 

    // Or add some fields/getters instead 
    public String getProp(String key){ 
     return properties.getProperty(key); 
    } 
} 

ここでは、インスタンスが起動時に作成されることに注意してください、それが最初に必要になったときにも遅延し、それを作成することができますしてください。ここでの利点は、プロパティファイルが見つからない場合に起動時に通知されることです。

また、特定の必須プロパティが含まれているかどうかをチェックし、それ以外の場合はエラーをスローしてプロパティにいくつかのゲッターを提供するためにこれを拡張できます。 (1)複数回ファイルを読む必要がないのはなぜ

public final class MyProperties { 
    public static final String USERNAME; 
    // More fields   

    static { 
     // Load your properties here and set the fields accordingly 
    } 

    private MyProperties() {} 
} 
関連する問題