自動設定の作成


学習目標

  • 起動プログラムおよびAutoConfigure
  • @ConfigurationProperties
  • StarterとAutoConfigure

  • 自動構成モジュール:自動構成
  • starter:定義に必要な依存性
  • 2つの
  • を1つのstarterに組み合わせる.
  • 実施方法

  • 依存性
  • を追加
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure-processor</artifactId>
        <optional>true</optional>
      </dependency>
    </dependencies>
        
    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-dependencies</artifactId>
          <version>2.5.3</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
  • @Beanとして登録するクラスファイルと@Configurationファイルを作成
    ex.@beanとして登録するクラスファイル-Holoman.java
  • public class Holoman {
        private String name;
        private int howLong;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getHowLong() {
            return howLong;
        }
    
        public void setHowLong(int howLong) {
            this.howLong = howLong;
        }
    
        @Override
        public String toString() {
            return "Holoman{" +
                    "name='" + name + '\'' +
                    ", howLong=" + howLong +
                    '}';
        }
    }
    ex.@プロファイル-HolomanConfiguration.java
    @Configuration
    public class HolomanConfiguration {
    
        @Bean
        public Holoman holoman(){
            Holoman holoman = new Holoman();
            holoman.setHowLong(26);
            holoman.setName("linger0310");
            return holoman;
        }
    }

  • src/main/resource/META-INFのspring.ファクトリファイルの作成

  • spring.工場に次のコードを追加します.
    Key : org.springframework.boot.autoconfigure.EnableAutoConfiguration
    Values:パッケージ名.作成されたプロファイル名.
  • org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
      패키지 이름.생성한 Configuration 파일 이름
  • mvn install
  • これらのプロセスで登録されたbeanは、他のプロジェクトに依存性を追加することができる.

    EnableAutoConfigurationとして登録されているbeanを他のプロジェクトで使用する方法


    beanとbean構成の起動と自動構成プロジェクトの定義

    Initという名前の他のプロジェクトにstarterおよびautoconfigureプロジェクトへの依存性を追加

    外部ライブラリに追加されたことを確認

    @ConfigurationProperties


    EnableAutoConfigurationのbeanにインポートし、適切に再定義します.
    使用する場合は、再定義ではなく初期入力の設定が反映される場合があります.

    解決策


    方法1.@ConditionalOnMissingBean
  • Benの構成部分において
    使用すると、財政の定義が反映されます.
  • ex
    @Configuration
    public class HolomanConfiguration {
    
        @Bean
        @ConditionalOnMissingBean
    
        public Holoman holoman(){
            Holoman holoman = new Holoman();
            holoman.setHowLong(26);
            holoman.setName("linger0310");
            return holoman;
        }
    }
    
    方法2.@コンフィギュレーションプロパティを使用して、よりクリーンに処理します.
  • 2-1. beanとbeanの構成を定義するプロジェクトに依存性を追加します.
  • <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
  • 2-2. beanとbeanの構成を定義するプロジェクトでbeanプロファイルを作成するように、beanプロパティファイルを作成して定義します.
  • ex
    @ConfigurationProperties("holoman (application.properties에서 사용할 이름)")
    public class HolomanProperties {
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getHowLong() {
            return howLong;
        }
    
        public void setHowLong(int howLong) {
            this.howLong = howLong;
        }
    
        private String name;
        private int howLong;
    }
  • 2-3. beanをauto configureのプロジェクトのアプリケーションにインポートします.propertiesでbeanにsetter値を追加します.
    ex
  • holoman.name = cyj
    holoman.how-long = 100
  • 2-4. @EnableConfigures.classパラメータを追加し、BenConfigがBenプロパティを参照できるようにします.また、beanプロパティをパラメータとしてbeanに注入し、setter値を使用してbeanプロパティのgetter値を入れることもできます.
    ex
  • @Configuration
    @EnableConfigurationProperties(HolomanProperties.class)
    public class HolomanConfiguration {
    
        @Bean
        @ConditionalOnMissingBean
        public Holoman holoman(HolomanProperties properties){
            Holoman holoman = new Holoman();
            holoman.setHowLong(properties.getHowLong());
            holoman.setName(properties.getName());
            return holoman;
        }
    }
    メソッド1でもメソッド2でも、最終的にはbeanにmvn installを行って変更結果を反映します.