- 前言
SpringBoot提供了许多官方的定义的starter场景启动器,如果没有提供呢?我们如何自定义一个starter场景启动器呢?
[官方文章地址](https://docs.spring.io/spring-boot/docs/2.5.4/reference/html/features.html#features.developing-auto-configuration.custom-starter)
- 命名规则
官方定义的场景启动器:spring-boot-starter-xxxx
自定义的场景启动器:xxxx-spring-boot-starter
- 创建一个自定义starter项目
官方强调到自定义starter项目需要直接或者间接spring-boot-starter依赖
- 开始自定义步骤
- 第一步:创建一个maven项目,引入依赖
<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.5.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.fun</groupId> <artifactId>acme-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> <name>acme-spring-boot-starter</name> <description>自定义场景启动器</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- 自义定的starter需要直接或者间接的引用到这个spring boot的core依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- 自定义配置文件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure-processor</artifactId> <optional>true</optional> </dependency> </dependencies> </project>
- 第二步:自定义一个xxxxAutoConfiguration
// 表明这是一个配置类 AcmeProperties.class) // 引入配置类,并在容器中生效 (/** * @ConditionalOnProperty控制自动配置是否生效 * 部分参数说明 * prefix:配置文件的属性名前缀 * havingValue:比较获取到的属性值与该值指定的值相同的时候才加载配置 * matchIfMissing:缺少该配置属性值是否可以加载,true可以。false不可以,默认是false * name:enabled 需要在引入的依赖匹配到enabled属性才能配置生效 */ prefix = "acme", name = "enabled", matchIfMissing = true) (public class AcmeAutoConfiguration { private AcmeProperties acmeProperties; AcmeService.class) // 当容器中没有这个bean时候再注册 ( public AcmeService acmeService() { return new AcmeService(acmeProperties); } }
- 第三步:写完了自动配置类需要在resource目录下创建一个目录和文件
META-INFA/spring.factories
在spring.factories文件中添加自动配置类,SpringBoot在启动的时候会扫描所有目录下spring.factories中的配置项进行自动加载
org.springframework.boot.autoconfigure.EnableAutoConfiguration= \ com.fun.acmespringbootstarter.config.AcmeAutoConfiguration
- 第四步:配置类
prefix = "acme") (public class AcmeProperties { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
- 最后一步:将自定义的starter项目打成jar包。创建一个SpringBoot将自定义starer jar的maven坐标引入pom.xml 调用即可
"/test") (public class TestController { private AcmeService acmeService; "/acme") ( public void testAcme() { acmeService.print(); } }
acme enabledtrue name fun
调用结果
自定义starer...fun
总结:自此一个简单的自定义starter创建完成,在熟悉SpringBoot的自动配置原理情况下,就更好理解这个过程了。
[自定义starter项目](https://gitee.com/fun_zhang/acme-spring-boot-starter)