创建一个 Spring Boot Starter 的本质是:

把“可复用的自动配置 + 依赖 + Bean装配”封装成一个 Maven 组件,让别的项目“引入即用”

下面给你一套标准工程化做法(面试+实战通用)


⭐ 1. Starter 本质结构

一个标准 starter 通常拆成两个模块:

my-spring-boot-starter        → 依赖聚合(不写代码)
my-spring-boot-autoconfigure  → 核心自动配置逻辑

⭐ 2. 项目结构

my-starter-parent
 ├── my-spring-boot-starter
 └── my-spring-boot-autoconfigure

⭐ 3. 第一步:创建 autoconfigure 模块(核心)


✔ 3.1 引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>
</dependencies>

✔ 3.2 写一个自动配置类

比如:自定义一个“日志组件”

@Configuration
@EnableConfigurationProperties(MyLogProperties.class)
public class MyLogAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public MyLogService myLogService(MyLogProperties properties) {
        return new MyLogService(properties.getPrefix());
    }
}

✔ 3.3 配置属性类

@ConfigurationProperties(prefix = "my.log")
public class MyLogProperties {

    private String prefix = "DEFAULT";

    public String getPrefix() {
        return prefix;
    }

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

⭐ 4. 第二步:注册自动配置(关键)

Spring Boot 3.x 用:

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

✔ 写入内容:

com.example.autoconfig.MyLogAutoConfiguration

👉 作用:

Spring Boot 启动时自动扫描并加载


⭐ 5. 第三步:创建 starter 模块(纯依赖)

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-spring-boot-autoconfigure</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

👉 这个模块:

不写代码,只做依赖传递


⭐ 6. 使用方式(像 Spring 官方一样)


✔ 引入 starter

<dependency>
    <groupId>com.example</groupId>
    <artifactId>my-spring-boot-starter</artifactId>
</dependency>

✔ application.yml

my:
  log:
    prefix: DEV

✔ 直接使用

@Autowired
private MyLogService myLogService;

⭐ 7. Spring Boot Starter 的核心机制

核心是三件事:


✔ 1)自动配置

Spring Boot


✔ 2)条件装配

@ConditionalOnMissingBean
@ConditionalOnClass
@ConditionalOnProperty

✔ 3)SPI加载机制

AutoConfiguration.imports

⭐ 8. Starter 的设计原则(面试加分)

✔ 1. 无侵入

  • 不影响业务代码

✔ 2. 默认可用

  • 引入即生效

✔ 3. 可配置

  • properties可覆盖

✔ 4. 可替换

  • 用户可自定义 Bean

⭐ 9. 常见 Starter 示例

Spring 官方:

  • spring-boot-starter-web
  • spring-boot-starter-data-redis

企业常见:

  • log starter
  • mq starter
  • auth starter
  • oss starter
  • sms starter

⭐ 10. 面试标准回答

如果面试官问:

如何自定义 Spring Boot Starter?

可以这样答:


✔ 标准答案

Spring Boot Starter 通常由两个模块组成:starter 和 autoconfigure。核心逻辑在 autoconfigure 模块中,通过 @Configuration 配置类结合 @ConditionalOnClass、@ConditionalOnProperty 等条件注解实现自动装配,并通过 spring.factories 或 Spring Boot 3 的 AutoConfiguration.imports 文件进行自动配置注册。starter 模块只负责依赖传递,使得业务项目引入后无需额外配置即可使用相关功能,从而实现“开箱即用”的能力。


⭐ 11. 一句话总结

Spring Boot Starter 本质是“自动配置 + 条件装配 + SPI注册 + 依赖封装”的工程化封装机制。

更多推荐