1. 概要

このチュートリアルでは、JavaプロパティファイルからSpringを使用して静的フィールドに値を挿入する方法を説明します。

2. 問題

まず、プロパティをプロパティファイルに設定するとします。

name = Inject a value to a static field

その後、その値をインスタンス変数に注入します。

そのは通常、インスタンスフィールドで@Valueアノテーションを使用して実行できます。

@Value("${name}")
private String name;

ただし、を静的フィールドに適用しようとすると、それでもnullになることがわかります:

@Value("${name}")
private static String NAME_NULL;

これは、Springが静的フィールドの@Valueをサポートしていないためです。

さて、正直なところ、これはコードが含まれる奇妙な位置であり、最初にリファクタリングを検討する必要があります。 しかし、これをどのように機能させることができるか見てみましょう。

3. 解決

まず、注入する静的変数NAME_STATICを宣言しましょう。

その後、 setNameStatic というセッターメソッドを作成し、@Valueアノテーションを付けます。

@RestController
public class PropertyController {

    @Value("${name}")
    private String name;

    private static String NAME_STATIC;

    @Value("${name}")
    public void setNameStatic(String name){
        PropertyController.NAME_STATIC = name;
    }
}

上で何が起こっているのかを理解してみましょう。

まず、RestControllerであるPropertyControllerがSpringによって初期化されています。

その後、SpringはValueの注釈付きフィールドとメソッドを検索します。

Springは、依存性注入を使用して、@Valueアノテーションを検出したときに特定の値を入力します。 ただし、値をインスタンス変数に渡す代わりに、暗黙のセッターに渡します。このセッターは、NAME_STATIC値の入力を処理します。

4. 結論

この短いチュートリアルでは、プロパティファイルから静的変数に値を挿入する方法について説明しました。 これは、リファクタリングの試みが失敗したときに検討できるルートです。

いつものように、コードはGitHubから入手できます。