やる気がストロングZERO

やる気のストロングスタイル

Spring徹底入門を読んでメモ: プロパティ編

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()が呼び出されてインスタンスが取得される

こんな感じか。