19

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

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

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

何か提案はありますか?

4

4 に答える 4

54

プロパティ (およびすべての 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 が作成され、すべての依存関係とプロパティ値が解決された後に実行されるというアノテーションが付けられたメソッドにコンストラクター ロジックを移動することです。

于 2015-02-20T20:17:07.053 に答える
0

やってみました:

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

  private @Value("${property}") String property;
  ...
}
于 2015-02-20T19:24:53.397 に答える
-2

別の考えられる理由は、「@Value」行が、これらのプロパティ/値を必要とする行の下にあることです。

この問題のデバッグに多くの時間を費やしたところ、行の順序が重要であることがわかりました!

于 2016-04-11T07:43:23.067 に答える