web-dev-qa-db-ja.com

Spring @Value( "$ {}")はしばしばnull

SpringBootアプリケーションを使用しています。一部の@Componentクラスでは@Valueフィールドがロードされますが、他のクラスでは常にnullです。

@Value/@Beanが作成された後、@Component(s)がロードされているようです。

@Beanのプロパティファイルからいくつかの値をロードする必要があります。

何か提案はありますか?

15
drenda

プロパティ(およびすべてのBean依存関係)は、Beanが構築された後(コンストラクターの実行)に注入されます。

必要に応じて、コンストラクターインジェクションを使用できます。

@Component
public class SomeBean {
    private String prop;
    @Autowired
    public SomeBean(@Value("${some.prop}") String prop) {
        this.prop = prop;
        //use it here
    }
}

もう1つのオプションは、@PostConstructアノテーションが付けられたメソッド内のコンストラクターロジックを移動することです。コンストラクターロジックは、Beanが作成され、すべての依存関係とプロパティ値が解決された後に実行されます。

36
Evgeni Dimitrov

やってみました:

@Component
@PropertySource("file:/your/file/path")
public class MyBean {

  private @Value("${property}") String property;
  ...
}
0
Efe Kahraman

これは、静的変数に解決するときに発生する可能性があります。私はこれをいつか観察し、静電気を取り除くだけで解決しました。いつも言われているように、スタティックを使用するときは注意してください。

0