春ブーツスターターを開発!

前回の記事で、我々は独自のスターターを達成するためのプロセスに再現します。この要約にスターターの自動設定の基本的なプロセスを、学んできました。

スターターのニーズを分析する最初:

  • 自動的春豆でスターターを読み込み、依存プロジェクトのスターターでカスタムを追加します。
  • application.propertiesから指定された設定をロードします

プロジェクトを作成します。

  1. まずスターターという名前のプロジェクトを作成します。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>top.ninwoo</groupId>
    <artifactId>demo-starter</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>
    </dependencies>
</project>
  1. リソースにMETA-INFディレクトリを作成し、ディレクトリを作成しますspring.factoriesこの構成では、我々は唯一のEnableAutoConfigurationアイテムを提供している、とだけ1つのクラスDemoAutoConfig構成に対応して設けられています。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=top.ninwoo.config.DemoAutoConfig  
  1. 作成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();
        }
    }

    このコンフィギュレーションクラスは、私たちは主に@Configurationと@EnableConfigurationProperties 2つのノートを使用しています。@EnableConfigurationPropertiesはConfigurationPropertiesを有効にします。

  2. DemoStarterProperties対応する作成ConfigurationProperties

    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;
        }
    }

    ConfigurationPropertiesクラスを作成します。このプリンシパルは、設定項目のapplication.propertiesから読み取るために使用され、自動的に対応するフィールドに設定されています。

  3. 豆を使用してテストを作成し、情報ConfigurationPropertiesクラスを使用します。

    最初は混乱がここにあり、私はこのConfigurationPropertiesクラスを使用する方法がわかりません。春に最も一般的な豆である。しかし、我々は安全に注釈クラスが自動的に自動的にSpringコンテナにBeanを作成します@ConfigurationPropertiesによって推測することができます。私たちが使用した場合と、あなたは一般的な豆注入法による情報ConfigurationPropertiesクラスを使用することができます。そこで、我々はこのようなテスト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使用注釈を作成中。

ここでは、私たちのスターターは今作成しました。MVNパッケージによって、または同じ親モジュールの方法の異なるサブプロジェクトを作成し、我々はスターターが有効になっているテストすることができます。

テストクラスを作成します。

Testクラスは、主にRestControllerを作成するために、そして検査を受けるとRestControllerを通じてコン​​テキストに登録春豆豆の名前をスターター、完了するために、春ブーツWebプロジェクトを使用しています。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>top.ninwoo</groupId>
    <artifactId>springboot-demo</artifactId>
    <version>1.0.0</version>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.1.6.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>top.ninwoo</groupId>
            <artifactId>demo-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

POMファイルで、私たちは実現スターターを追加します。

RestController:

@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);
    }
}

私たちは、通常のWebプロジェクトに比べて、私たちは依存性を追加しましたが、起動クラスを変更しなかった、ことがわかります。

テスト

アクセス127.0.0.1:8080/getListインタフェースは、我々が見ることができる最後のいくつかのBean名は次のとおりです。

...,"top.ninwoo.config.DemoAutoConfig","demoBean","top.ninwoo.demo-top.ninwoo.config.DemoStarterProperties"]

これは、依存性を注入することにより、当社のスターターは、春のコンテキストでスターターの設定クラスビーンを作成されていることを証明しています。

application.properties、直接アクセスhttp://127.0.0.1:8080/getDemoBeanを提供していない場合は、Beanインスタンスは、デフォルトのテストパラメータのデフォルトで取得することができます。

application.propertiesを追加します。

top.ninwoo.demo.name=joliu

再びインタフェースにアクセスするプロジェクトを、再起動して、インストールを対応するテストクラスのインスタンスで見つかったパラメータを使用ビーン属性はjoliuを返し、設定されています。

概要

ここで、我々は、私たちの日常のプロジェクトで、このようなスターターを開発しようとすることができ、SpringBootスターター最も基本的なプロセスを開発することを学んだと言うことができます。

おすすめ

転載: www.cnblogs.com/NinWoo/p/11305650.html