DIコンテナ編に引き続きプロパティ周りについてメモ
↑ この本で得た知識 + 調べたり試したりして得た知識。
以前にもここでプロパティについて書いた。
【SpringBoot】application.propertyについて - やる気がストロングZERO
これに加えてわかったことを書く。
@ConfigurationPropertiesと@Configurationアノテーション
なんか混同して理解しづらかったので書く。
@ConfigurationProperties
@ConfigurationPropertiesアノテーションをつけるClassは、Property設定ファイル(application.propertiesとかapplication.ymlとか)の内容をオブジェクトにバインドするためのClassである。
@ConfigurationProperties(prefix = "myapp") public class AppConfigProperty { private String name; private String age; private Child child; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public static class Child{ private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } } }
上記のクラスは以下のような設定ファイルの内容を自動的にフィールドにバインドする。
application.properties
myapp.name=taro myapp.age=30 myapp.child.name=jiro myapp.child.age=10
@ConfigurationPropertiesアノテーションつけたクラスを利用するための@EnableConfigurationPropertiesアノテーション
@ConfigurationPropertiesアノテーションを使って読み込んだ設定を使うには、@EnableConfigurationPropertiesアノテーションをつかう。
@Component @EnableConfigurationProperties(AppConfigProperty.class) // 設定オブジェクトをBeanとしてDIコンテナに登録する public class SomeClass { private final AppConfigProperty configProperty; // 設定オブジェクトをコンストラクタインジェクションする public SomeClass(AppConfigProperty configProperty) { this.configProperty = configProperty; } public void SomeFunc() { this.configProperty.getChild().getName(); // こんな感じで設定を読み込める } }
@Configuration
@ConfigurationアノテーションをつけるClassは、Beanの登録を定義するための設定クラス。
@Configuration public class AppConfig { @Bean public SomeClass someClass() { return new SomeClass(); } }
上記の設定により、コード上でSomeClassが求められたときに、someClass()が呼び出されてインスタンスが取得される
こんな感じか。