文章目录
- 一、starter启动原理
- 二、新建两个SpringBoot项目
- 三、启动项pom.xml
- 四、自动配置项pom.xml
- 五、自动配置项编写代码
- 六、安装自动配置项的pom.xml到本地Maven仓库
- 七、安装启动项的pom.xml到本地Maven仓库
- 八、新建引用项
- 九、启动项新建spring.factories
- 十、启动项目测试
- 十一、总结
一、starter启动原理
引入starter --- xxxAutoConfiguration --- 容器中放入组件 ---- 绑定xxxProperties ---- 配置项
二、新建两个SpringBoot项目
把不需要的文件删除后的目录结构如下:
(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>
五、自动配置项编写代码
实现通过配置文件修改前后缀的功能
业务逻辑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仓库
安装成功:
七、安装启动项的pom.xml到本地Maven仓库
安装成功:
八、新建引用项
这个项目为实际的开发场景SpringBoot07-starter-test
,调用上面自定义的starter
在SpringBoot07-starter-test
项目的pom.xml文件中引入SpringBoot07-starter
的依赖
<dependency>
<groupId>com.sp</groupId>
<artifactId>springboot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
创建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
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.sp.autoconfigure.auto.HelloServiceAutoConfiguration
重新打包到Maven仓库
十、启动项目测试
启动SpringBoot07-starter-test
进行测试
浏览器输入:http://localhost:8080/hello进行访问
显示如下:
十一、总结
1、创建一个空的Maven项目和一个SpringBoot项目,SpringBoot项目的pom.xml文件中引入空的Maven项目的pom.xml依赖
2、SpringBoot项目编写自定义的starter代码逻辑
3、新建调用starter的项目,并在该项目的pom.xml文件中引入自定义starter的依赖