一、什么是 Spring Boot Starter?
Spring Boot 的一大特点就是“开箱即用”,这得益于它强大的 Starter 机制。所谓的 Starter,其实就是一个 Maven 或 Gradle 依赖,它包含了自动配置、默认属性和依赖管理等功能,使得我们只需引入一个依赖,就可以直接使用某个功能。
例如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
引入这个依赖后,Spring Boot 会自动帮我们配置好 Web 相关的 Bean,无需手动配置。
🛠️ 二、为什么要自定义 Starter?
有时候我们希望将一些通用的功能模块封装成独立的 Starter,供多个项目复用。比如:
- 自定义日志输出格式
- 集成公司内部的 SDK
- 提供统一的异常处理机制
- 开发通用的工具类库
自定义 Starter 可以帮助我们:
- 解耦业务逻辑和通用逻辑
- 提高代码复用率
- 统一配置和管理依赖
🧩 三、如何自定义一个 Starter?
1. 创建 Maven 项目
你可以使用 Spring Initializr 创建一个空的 Maven 项目,也可以手动创建。
结构示例:
my-spring-boot-starter/
├── pom.xml
└── src/
└── main/
├── java/
│ └── com.example.starter/
│ ├── MyService.java
│ └── MyAutoConfiguration.java
└── resources/
└── META-INF/
└── spring.factories
2. 编写核心类
✅ MyService.java
这是一个简单的服务类,作为 Starter 提供的功能。
package com.example.starter;
import org.springframework.stereotype.Service;
@Service
public class MyService {
public String sayHello() {
return "Hello from MyStarter!";
}
}
✅ MyAutoConfiguration.java
自动配置类,用于注册 Bean。
package com.example.starter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyAutoConfiguration {
@Bean
public MyService myService() {
return new MyService();
}
}
3. 配置 spring.factories 文件
路径:src/main/resources/META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.starter.MyAutoConfiguration
4. 打包发布
使用 Maven 打包命令:
mvn clean install
你也可以发布到私有仓库或 Maven Central。
📦 四、在项目中使用 Starter
在你的 Spring Boot 应用中引入这个 Starter:
<dependency>
<groupId>com.example</groupId>
<artifactId>my-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
然后在 Controller 中使用:
@RestController
public class HelloController {
private final MyService myService;
public HelloController(MyService myService) {
this.myService = myService;
}
@GetMapping("/hello")
public String sayHello() {
return myService.sayHello();
}
}
🎯 五、总结
通过自定义 Starter,我们可以将通用逻辑封装为独立模块,实现组件化、模块化开发。这不仅提高了代码的可维护性,也提升了团队协作效率。
关键点回顾:
- Starter 的本质是一个自动配置的 Jar 包
- 需要编写自动配置类并注册 Bean
- 使用
spring.factories
启用自动配置 - 可以通过 Maven 打包并复用