文章目录

  • 一、starter启动原理
  • 二、新建两个SpringBoot项目
  • 三、启动项pom.xml
  • 四、自动配置项pom.xml
  • 五、自动配置项编写代码
  • 六、安装自动配置项的pom.xml到本地Maven仓库
  • 七、安装启动项的pom.xml到本地Maven仓库
  • 八、新建引用项
  • 九、启动项新建spring.factories
  • 十、启动项目测试
  • 十一、总结


一、starter启动原理

springboot pagehelp 自定义方言 springboot怎么自定义starter_spring


引入starter --- xxxAutoConfiguration --- 容器中放入组件 ---- 绑定xxxProperties ---- 配置项

二、新建两个SpringBoot项目

把不需要的文件删除后的目录结构如下:

springboot pagehelp 自定义方言 springboot怎么自定义starter_spring boot_02


(target文件夹是后面打包maven生成的,新建时是没有的)

其中SpringBoot07-starter是启动项,供其他项目引用,SpringBoot07-starter-autoconfigure是自动配置包,是真正需要写业务代码的

三、启动项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 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.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sp</groupId>
    <artifactId>springboot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-starter</name>
    <description>这个是场景启动器,提供给别的项目引用</description>

    <dependencies>
        <dependency>
<!--            下面的是SpringBoot07-starter-autoconfigure的自动配置包-->
            <groupId>com.sp</groupId>
            <artifactId>springboot-starter-autoconfigure</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

四、自动配置项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 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.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sp</groupId>
    <artifactId>springboot-starter-autoconfigure</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <name>springboot-starter-autoconfigure</name>
    <description>starter的自动配置包</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
</project>

五、自动配置项编写代码

实现通过配置文件修改前后缀的功能

springboot pagehelp 自定义方言 springboot怎么自定义starter_xml_03

业务逻辑HelloService

public class HelloService {
    @Autowired
    HelloProperties helloProperties;

    public String sayHello(String userName){
        return helloProperties.getPrefix() + ":"+userName+"》"+helloProperties.getSuffix();
    }
}

配置文件HelloProperties

@ConfigurationProperties("sp.autoconfigure")	//包名
public class HelloProperties {
    private String prefix;
    private String suffix;

    public String getPrefix() {
        return prefix;
    }

    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }

    public String getSuffix() {
        return suffix;
    }

    public void setSuffix(String suffix) {
        this.suffix = suffix;
    }
}

自动配置功能HelloServiceAutoConfiguration

@Configuration
@ConditionalOnMissingBean(HelloService.class)
@EnableConfigurationProperties(HelloProperties.class)//默认HelloProperties放在容器中
public class HelloServiceAutoConfiguration {
    @ConditionalOnMissingBean(HelloService.class)
    @Bean
    public HelloService helloService(){
        HelloService helloService = new HelloService();
        return helloService;
    }
}

六、安装自动配置项的pom.xml到本地Maven仓库

springboot pagehelp 自定义方言 springboot怎么自定义starter_spring_04

安装成功:

springboot pagehelp 自定义方言 springboot怎么自定义starter_xml_05

七、安装启动项的pom.xml到本地Maven仓库

springboot pagehelp 自定义方言 springboot怎么自定义starter_spring_06


安装成功:

springboot pagehelp 自定义方言 springboot怎么自定义starter_spring boot_07

八、新建引用项

这个项目为实际的开发场景SpringBoot07-starter-test,调用上面自定义的starter

springboot pagehelp 自定义方言 springboot怎么自定义starter_xml_08

SpringBoot07-starter-test项目的pom.xml文件中引入SpringBoot07-starter的依赖

<dependency>
    <groupId>com.sp</groupId>
    <artifactId>springboot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

springboot pagehelp 自定义方言 springboot怎么自定义starter_spring boot_09

创建HelloController

@RestController
public class HelloController {
    @Autowired
    HelloService helloService;

    @GetMapping("/hello")
    public String sayHello(){
        return helloService.sayHello("张三");
    }
}

application.properties中添加如下内容

sp.autoconfigure.prefix=nihao
sp.autoconfigure.suffix=6666

九、启动项新建spring.factories

springboot pagehelp 自定义方言 springboot怎么自定义starter_xml_10

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.sp.autoconfigure.auto.HelloServiceAutoConfiguration

重新打包到Maven仓库

springboot pagehelp 自定义方言 springboot怎么自定义starter_xml_11

十、启动项目测试

启动SpringBoot07-starter-test进行测试

浏览器输入:http://localhost:8080/hello进行访问

显示如下:

springboot pagehelp 自定义方言 springboot怎么自定义starter_spring_12

十一、总结

1、创建一个空的Maven项目和一个SpringBoot项目,SpringBoot项目的pom.xml文件中引入空的Maven项目的pom.xml依赖
2、SpringBoot项目编写自定义的starter代码逻辑
3、新建调用starter的项目,并在该项目的pom.xml文件中引入自定义starter的依赖