• SpringBoot自定义一个starter


    @Configuration //指定这个类是一个配置类
    @ConditionalOnXXX //在指定条件成立的情况下自动配置类生效
    @AutoConfigureAfter //指定自动配置类的顺序
    @Bean //给容器中添加组件
    @ConfigurationPropertie结合相关xxxProperties类来绑定相关的配置
    @EnableConfigurationProperties //让xxxProperties生效加入到容器中
    自动配置类要能加载
    将需要启动就加载的自动配置类,配置在META‐INF/spring.factories
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=
    org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,
    org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,
    • 启动器只用来做依赖导入;
    • 专门来写一个自动配置模块;
    • 启动器依赖自动配置;别人只需要引入启动器(starter)
    • mybatis-spring-boot-starter;自定义启动器名-spring-boot-starter

     步骤:

      启动器模块(就是一个Maven项目):

    <?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>ustc-anmin-starter</groupId>
        <artifactId>ustc-anmin-spring-boot-starter</artifactId>
        <version>1.0-SNAPSHOT</version>
    
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>10</maven.compiler.source>
            <maven.compiler.target>10</maven.compiler.target>
        </properties>
    
        <!--引入自动配置模块-->
        <dependencies>
            <dependency>
                <groupId>ustc.anmin.starter</groupId>
                <artifactId>anmin-spring-boot-starter-autoconfigure</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    
    </project>

      自动配置模块

    <?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>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.6.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>ustc.anmin.starter</groupId>
        <artifactId>anmin-spring-boot-starter-autoconfigure</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>anmin-spring-boot-starter-autoconfigure</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>
        </dependencies>
    
    
    
    </project>
    package ustc.anmin.starter;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    @ConfigurationProperties(prefix = "ustc.anmin")
    public class HelloServiceProperty {
        private String prefix;
        private String suffix;
    
        public String getSuffix() {
            return suffix;
        }
    
        public void setSuffix(String suffix) {
            this.suffix = suffix;
        }
    
        public String getPrefix() {
            return prefix;
        }
    
        public void setPrefix(String prefix) {
            this.prefix = prefix;
        }
    }
    package ustc.anmin.starter;
    
    public class HelloService {
        HelloServiceProperty helloServiceProperty;
    
        public String sayHelloAnmin(String name){
            return helloServiceProperty.getPrefix() + name + helloServiceProperty.getSuffix();
        }
    
        public HelloServiceProperty getHelloServiceProperty() {
            return helloServiceProperty;
        }
    
        public void setHelloServiceProperty(HelloServiceProperty helloServiceProperty) {
            this.helloServiceProperty = helloServiceProperty;
        }
    }
    package ustc.anmin.starter;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ConditionalOnWebApplication
    @EnableConfigurationProperties(HelloServiceProperty.class)  //将配置类加入容器
    public class HelloServiceAutoConfiguration {
        @Autowired
        HelloServiceProperty helloServiceProperty;
    
        @Bean
        public HelloService helloService(){
            HelloService service = new HelloService();
            service.setHelloServiceProperty(helloServiceProperty);
            return new HelloService();
        }
    }

    spring.factories文件

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=
      ustc.anmin.starter.HelloServiceAutoConfiguration

     test controller

    <?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>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.6.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>ustc.anmin</groupId>
        <artifactId>starter-test</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>starter-test</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-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>ustc.anmin.starter</groupId>
                <artifactId>ustc-anmin-spring-boot-starter</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    package ustc.anmin.starter.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import ustc.anmin.starter.HelloService;
    
    @RestController
    public class HelloController {
    
        @Autowired
        HelloService service;
    
        @GetMapping("/hello")
        public String hello(){
            return service.sayHelloAnmin("---anmin---");
        }
    
    }

  • 相关阅读:
    bootstrap table load属性
    Jquery中hide()、show()、remove()特性
    Jquery精准计算
    .nojekyll 文件是什么
    快来用 Nuxt 开发静态网站
    CI:持续集成
    把组件库发布到 npm
    JS的各种模块化规范
    打包发布:让组件库支持按需加载
    docz: 组件库文档 so easy!
  • 原文地址:https://www.cnblogs.com/ustc-anmin/p/11055681.html
Copyright © 2020-2023  润新知