SpringBootアプリケーションを使用しています。一部の@Component
クラスでは@Value
フィールドがロードされますが、他のクラスでは常にnull
です。
@Value
/@Bean
が作成された後、@Component
(s)がロードされているようです。
@Bean
のプロパティファイルからいくつかの値をロードする必要があります。
何か提案はありますか?
プロパティ(およびすべての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が作成され、すべての依存関係とプロパティ値が解決された後に実行されます。
やってみました:
@Component
@PropertySource("file:/your/file/path")
public class MyBean {
private @Value("${property}") String property;
...
}
これは、静的変数に解決するときに発生する可能性があります。私はこれをいつか観察し、静電気を取り除くだけで解決しました。いつも言われているように、スタティックを使用するときは注意してください。