web-dev-qa-db-ja.com

Spring:静的フィールドに値を注入する方法は?

このクラスで

@Component
public class Sample {

    @Value("${my.name}")
    public static String name;


}

Sample.name、常に「null」です。だから私はこれを試しました。

public class Sample {

    public static String name;

    @PostConstruct
    public void init(){
        name = privateName;
    }

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

    public String getPrivateName() {
        return privateName;
    }

    public void setPrivateName(String privateName) {
        this.privateName = privateName;
    }  

}

このコードは機能します。 Sample.nameが適切に設定されています。これは良い方法ですか?そうでない場合、もっと良い方法はありますか?そして、それを行う方法は?

68
Whiteship

何よりも、public static non _finalフィールドはevilです。 Springでは、理由により、そのようなフィールドへの注入を許可しません。

あなたの回避策は有効です。ゲッター/セッターは必要ありません。privateフィールドで十分です。一方、これを試してください:

@Value("${my.name}")
public void setPrivateName(String privateName) {
    Sample.name = privateName;
}  

@Autowired/@Resourceで動作します)。しかし、建設的なアドバイスを提供するために:public staticフィールドの代わりにprivateフィールドとゲッターを持つ2番目のクラスを作成します。

82