1概要

設計上、

@ Repository、@ Service、@ Controller

などのアノテーションが付けられたクラスはSpringによって管理され、そこに設定を注入することは簡単で自然です。それほど単純ではないのは、Springによって直接管理されていないクラスに設定を渡すことです。

その場合は、

__ ClassLoaderベースの設定ロードを使用するか、単に別のBeanでクラスをインスタンス化して必要なパラメータを手動で設定することができます – 設定エントリは

** 。properties__ファイルに排他的に格納する必要がないので推奨されるオプションです。

このクイック記事では、Java


ClassLoader

を使用した



。propertiesファイルのロード、および既にリンクされていないリンクへのインジェクション:/properties-with-spring[Springによる設定のロード]のトピックをアンマネージクラスに取り上げます。


2クラスローダによるロード設定

簡単に言えば、

** 。properties

ファイルは設定情報を保持するリソースファイルです。自動アプリケーション設定ロードをサポートするサードパーティの実装を使用する代わりに、 Springで実装されているのであれば、Javaの

ClassLoader

を使っても同じことができます。


resourceFileName

で定義された

Properties

を保持するコンテナオブジェクトを作成します。コンテナを設定で埋めるために、

ClassLoader

を使います。


loadProperties(String resourceFileName)

メソッドを実装する

PropertiesLoader

クラスを定義しましょう。

public class PropertiesLoader {

    public static Properties loadProperties(String resourceFileName) throws IOException {
        Properties configuration = new Properties();
        InputStream inputStream = PropertiesLoader.class
          .getClassLoader()
          .getResourceAsStream(resourceFileName);
        configuration.load(inputStream);
        inputStream.close();
        return configuration;
    }
}

すべての

Class

オブジェクトには、それをインスタンス化した

ClassLoader

への参照が含まれています。これは主にクラスのロードを担当するオブジェクトですが、このチュートリアルではプレーンなJavaクラスの代わりにリソースファイルのロードに使用します。

ClassLoader

はクラスパスで

resourceFileName

を探しています。

その後、

getResourceAsStream

APIを介してリソースファイルを

InputStream

としてロードします。

上記の例では、

load(InputStream)

APIを使用して

resourceFileName

を解析できる設定コンテナを定義しました。

loadメソッドは、区切り文字として

“:”

または

“=”

文字をサポートする

** 。properties

ファイルの解析を実装しています。また、新しい行の先頭に使用されている

“#”

または

“!”

の文字は両方ともコメントマーカーであり、その行は無視されます。

最後に、設定ファイルから定義された設定エントリの正確な値を読みましょう。

String property = configuration.getProperty(key);


3 Spring

による設定のロード

2番目の解決策は、Spring Spring機能を利用して、低レベルのファイルのロードと処理を処理することです。

カスタムクラスを初期化するために必要な設定を保持する

Initializer

を定義しましょう。

Bean

初期化中に、フレームワークは

** 。properties

設定ファイルから

@ Value

でアノテーションが付けられたすべてのフィールドをロードします。

@Component
public class Initializer {

    private String someInitialValue;
    private String anotherManagedValue;

    public Initializer(
      @Value("someInitialValue") String someInitialValue,
      @Value("anotherValue") String anotherManagedValue) {

        this.someInitialValue = someInitialValue;
        this.anotherManagedValue = anotherManagedValue;
    }

    public ClassNotManagedBySpring initClass() {
        return new ClassNotManagedBySpring(
          this.someInitialValue, this.anotherManagedValue);
    }
}


Initializer

は、

ClassNotManagedBySpring.

のインスタンス化を担当できるようになりました。

次に、

Initializer

インスタンスにアクセスし、その上で

initClass()

メソッドを実行して、カスタム

ClassNotManagedBySpring

のインスタンス化を処理します。

ClassNotManagedBySpring classNotManagedBySpring = initializer.initClass();


Initializer

を参照したら、カスタム

ClassNotManagedBySpring.

をインスタンス化できます。


4概要

このクイックチュートリアルでは、プロパティをSpring以外のJavaクラスに読み込むことに焦点を当てました。

いつものように、実装例はhttps://github.com/eugenp/tutorials/tree/master/spring-core[over GitHub]にあります。