このクラスで
@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 static
non _final
フィールドはevilです。 Springでは、理由により、そのようなフィールドへの注入を許可しません。
あなたの回避策は有効です。ゲッター/セッターは必要ありません。private
フィールドで十分です。一方、これを試してください:
@Value("${my.name}")
public void setPrivateName(String privateName) {
Sample.name = privateName;
}
(@Autowired
/@Resource
で動作します)。しかし、建設的なアドバイスを提供するために:public static
フィールドの代わりにprivate
フィールドとゲッターを持つ2番目のクラスを作成します。