自定义spring-boot-starter
自定义命名规范:格式:{项目名}-spring-boot-starter
1. 项目结构
my-spring-boot-starter
├── src
│ └── main
│ ├── java
│ │ └── com/example/starter
│ │ ├── MyStarterProperties.java
│ │ └── MyStarterAutoConfiguration.java
│ └── resources
│ └── META-INF
│ └── spring.factories
└── pom.xml
2. 添加依赖(pom.xml
)
<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.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>my-spring-boot-starter</artifactId><version>1.0.0</version><packaging>jar</packaging><dependencies><!-- Spring Boot 自动配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><!-- 可选:使application.yml 有配置提示功能 optional=ture 只在当前项目有用,不会进行依赖传递 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency></dependencies>
</project>
3.1 配置属性类(MyStarterProperties.java
)
package com.example.starter;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "my.starter")
public class MyStarterProperties {private String message = "默认消息";public String getMessage() { return message; }public void setMessage(String message) { this.message = message; }
}
3.2 自动配置类(MyStarterAutoConfiguration.java
)
package com.example.starter;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@EnableConfigurationProperties(MyStarterProperties.class)
public class MyStarterAutoConfiguration {// MyServiceImpl 功能实现类@Bean@ConditionalOnMissingBeanpublic MyService myService(MyStarterProperties properties) {return new MyServiceImpl(properties.getMessage());}
}
4. 配置自动加载(spring.factories
)
- 方式 1(spring-boot 2.x):在
src/main/resources/META-INF/spring.factories
中添加,如果有多个自动配置类,使用英文逗号分割
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.example.starter.MyStarterAutoConfiguration
- 方式 2(Spring Boot 3.x+ 推荐):在
src/main/resources/META-INF/spring/AutoConfiguration.imports
中直接写类名,如果有多个自动配置类,不需要使用任何分隔符(如逗号、分号、空格等)。每个类名应该独占一行。
com.example.starter.MyStarterAutoConfiguration
5. 放入本地maven仓库
mvn clean install
6. 其它项目(模块)引入使用
<dependency><groupId>com.example</groupId><artifactId>my-spring-boot-starter</artifactId><version>1.0.0</version>
</dependency>