1. ホーム
  2. spring

[解決済み] Spring: 静的フィールドに値を注入するには?

2022-10-29 22:08:35

質問

このクラスで

@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 は正しく設定されています。これは良い方法なのでしょうか?もしそうでないなら、何かもっと良い方法があるのでしょうか?また、どのようにそれを行うのですか?

どのように解決するのですか?

まず最初に public staticfinal のフィールドは . Springはこのようなフィールドへのインジェクションを許さない理由があります。

あなたの 回避策 は有効で、getter/setter さえ必要ありません。 private フィールドで十分です。一方、次のようにしてみてください。

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

(を使うことができます。 @Autowired / @Resource ). しかし、建設的なアドバイスをするために 2 番目のクラスは private フィールドとゲッターを持つ public static フィールドの代わりに