spring-boot--lernning之自定义starters

思路:

  1这个场景需要使用到的依赖是什么???

  2如何编写自动配置

 

@Configuration  指定这个类是一个配置类
@ConditionalOnXXXX   指定条件下成立的情况下自动配置类生效
@AutoConfigureAfter  指定自动配置类的顺序

@Bean  //给容器添加组件


@ConfigurationPropertie  结合相关的xxxProperties类来绑定相关配置
@EnableConfigurationProperties  让xxxproperties生效加入到容器中

 

 

 

 

模式11111111:
启动器只用来引用依赖导入:

专门写一个自动配置模块:

启动器依赖自动配置模块:别人只需要引入启动器

 

建立自动配置工程:

pom.xml:

 

 

 

 

 

 

 

 

##############################################################################

第二种,start包含需要加载的模块,autoconfig只是自动配置

 

建立第一个模块工程:

 

 编写需要加入的模块:

public class DemoModule {
    private String version;
    private String name;

    public String exeModuleMethod(){
        return "DemoModule ,name: " + name + "verson: "+version;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

pom文件最小化:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.quan</groupId>
    <artifactId>start</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>start</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

    </dependencies>

    <build>
    </build>

</project>

 

maven install打包工程到本地maven仓库

 

新建一个自动配置工程:

 

 

pom文件

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.quan</groupId>
    <artifactId>demo-springboot-start</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-springboot-start</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--   加入依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!--加入刚刚打包好的工程-->
        <dependency>
            <groupId>com.quan</groupId>
            <artifactId>start</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

 

编写属性配置类:

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "com.quan")
public class DemoProperties {
    private String version;
    private String name;

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

 

编写自动配置类:

@Configuration
@EnableConfigurationProperties(DemoProperties.class)
public class DemoAutoConfiguration {

    @Bean
    public DemoModule demoModule(DemoProperties demoProperties){
        DemoModule demoModule = new DemoModule();
        demoModule.setName(demoProperties.getName());
        demoModule.setVersion(demoProperties.getVersion());
        return demoModule;
    }
}

 

resources下建立:META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.quan.springbootstart.DemoAutoConfiguration

加入需要自动配置的自动配置类全限定类名

 

测试引入包:

 <dependency>    
    <groupId>com.quan</groupId>
    <artifactId>demo-springboot-start</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

即可

 

posted @ 2020-08-14 07:49  小丑quan  阅读(162)  评论(0)    收藏  举报