初期化中にBeanが完全に構成されていない場合、Spring Bootが例外をスローするようにします。正しい方法は、関連性のあるBeanメソッドに@Required
という注釈を付けることだと思っていましたが、期待通りに動作しません。@Requiredは、Beanが初期化されても例外を発生させます。
application.yml:
my_field: 100
単純なBeanクラス:
package com.example.demo;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.stereotype.Component;
@Component
public class MyProperties {
private int myField;
public MyProperties(){}
@Required
public void setMyField(int myField) {
this.myField = myField;
}
@Override
public String toString() {
return "{myField=" + myField + '}';
}
}
マイアプリケーションクラス:DemoApplicationのinitメソッドで
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import javax.annotation.PostConstruct;
@SpringBootApplication
public class DemoApplication {
@Bean
@ConfigurationProperties
public MyProperties getMyProperties() {
return new MyProperties();
}
@PostConstruct
public void init() {
MyProperties myProperties = getMyProperties();
System.out.println(myProperties);
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
私は結果のBeanオブジェクトを印刷しています。 @Required
注釈がないと、正しく読み込まれ、{myField=100}
が印刷されます。しかし、注釈を追加すると、この例外がスローされます。
org.springframework.beans.factory.BeanInitializationException: Property 'myField' is required for bean 'myProperties'
これは、設定ファイルに必要な値が含まれているにもかかわらずです。
Springにフィールドが必要であることを伝えるのは正しいですか?