Spring Boot Starterを開発します。

6212 ワード

前の記事では、starterが自動配置を実現する基本的な流れを理解しました。この短い結び目で前のプロセスを再現し、カスタムstarterを実現します。
まずstarterの需要を分析します。
  • プロジェクトにカスタムのstarter依存を追加し、自動的にSpringにstarterのBeanをロードする。
  • 指定構成
  • をappication.propertiesからロードする。
    プロジェクトを作成
  • は、まずstarterという項目を作成します。
  • 
    
        4.0.0
    
        top.ninwoo
        demo-starter
        1.0.0
        jar
    
        
            
                org.springframework.boot
                spring-boot
                2.1.6.RELEASE
            
        
    
  • は、resorcessにおいてMETA−INFのディレクトリを作成し、spring.factoriesをディレクトリに作成する。この構成では、EnbaleAutoConfigration項目のみを設定し、DemoAutoConfiggプロファイルクラスのみを設定します。
  • org.springframework.boot.autoconfigure.EnableAutoConfiguration=top.ninwoo.config.DemoAutoConfig  
  • DemoAutoConfigの構成クラス
    package top.ninwoo.config;
    
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @EnableConfigurationProperties(DemoStarterProperties.class)
    public class DemoAutoConfig {
    
        @Bean
        DemoBean demoBean() {
            return new DemoBean();
        }
    }
    を作成しました。私たちは主に@Configrationと@EnbaleConfigrationProptiesの二つの注釈を使いました。EnbaleConfigrationProptiesはConfigrationProptiesを有効にします。
  • ConfigrationPropties対応するDemoStarterPropties
    package top.ninwoo.config;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    @ConfigurationProperties(prefix = "top.ninwoo.demo")
    public class DemoStarterProperties {
    
        private String name = "default";
        private int age = 0;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    を作成してCofigrationProptiesクラスを作成します。このクラスは主にappication.propertiesから構成項目を読み取り、対応するフィールドに自動的に設定します。
  • は、試験用ビーンを作成し、ConfigrationProptiesクラスの情報を使用する。最初はこのCofigrationPropties類の使い方が分かりませんでした。ただし、スプリングの中で最も一般的なのはビーンです。@ConfigrationPropties注釈の種類を通して、自動的にSpring容器の中にビーンを自動的に作成すると大胆に推測できます。私達は使う時に普通のbean注入方式でCofigrationPropties類の情報を使うことができます。したがって、このようにしてテストBean
    package top.ninwoo;
    
    import javax.annotation.Resource;
    
    public class DemoBean {
        @Resource
        DemoStarterProperties properties;
    
        public String getName() {
            return properties.getName();
        }
    
        public String getAge() {
            return getAge();
        }
    }
    
    を作成し、DemoAutoConfigで@Bean注釈を使ってBeanを作成します。
  • ここに来て、私たちのstarterが作成されました。mvnパッケージを通して、または同じ親プロジェクトの異なる子Moduleを作成する方法で、このstarterが有効かどうかをテストすることができます。
    試験クラスの作成
    テストクラスはspring boot webプロジェクトを使用して完成し、主にRestControllerを作成し、RestControllerを通じてSpringコンテキストに登録されたbean namesとstarterのテストBeanを取得します。
    pom.xml
    
    
        4.0.0
    
        top.ninwoo
        springboot-demo
        1.0.0
    
        
            spring-boot-starter-parent
            org.springframework.boot
            2.1.6.RELEASE
        
    
        
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                top.ninwoo
                demo-starter
                1.0-SNAPSHOT
            
        
    
    pomファイルには、先ほど実現したstarterを追加しました。
    RertController:
    @RestController
    public class IndexController implements ApplicationContextAware {
    
        ApplicationContext ctx = null;
    
        @Resource
        DemoBean demoBean;
    
        @RequestMapping("/getList")
        public String[] getBeanNames() {
            return ctx.getBeanDefinitionNames();
        }
    
        @RequestMapping("/getDemoBean")
        public String demoBean() {
            return demoBean.getName();
        }
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            ctx = applicationContext;
        }
    }
    
    SpringBoot起動タイプMainApp:
    package top.ninwoo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class MainApp {
    
        public static void main(String[] args) {
            SpringApplication.run(MainApp.class, args);
        }
    }
    私たちは通常のウェブプロジェクトと比べて、スタートクラスを変更していない依存性を追加しただけです。
    テスト
    127.1.0.1:8080/get Listインターフェースにアクセスして、最後のいくつかのbean Namesを見ることができます。
    ...,"top.ninwoo.config.DemoAutoConfig","demoBean","top.ninwoo.demo-top.ninwoo.config.DemoStarterProperties"]
    これは,我々starter依存を注入することにより,Springの文脈でstarter配置クラスのBeanが作成されたことを証明している。
    appication.propertiesが設定されていない場合は、直接アクセスします。http://127.0.0.1:8080/getDemoBeanテスト用のビーンの例ではデフォルトのパラメータ構成defaultを取得することができます。
    appication.propertiesを追加:
    top.ninwoo.demo.name=joliu
    プロジェクトを再起動し、再度このインターフェースにアクセスして、テスト用のビーンのインスタンスに対応する属性が設定クラスのパラメータをインストールして設定されていることを発見し、joliuに戻りました。
    結び目
    ここでは、我々はSpringBoot Starterの開発の最も基本的な流れを理解していると言ってもいいです。私たちは日常的なプロジェクトで中開発のようなstarterを試してみます。
    転載先:https://www.cnblogs.com/NinWoo/p/11305650.html