问题

SpringBoot核心模块有哪些?

答案

1. 核心概念

SpringBoot采用模块化设计,将不同功能拆分为独立的Maven模块,形成清晰的层次结构。理解核心模块有助于深入掌握SpringBoot的工作原理。

2. SpringBoot核心模块架构

SpringBoot核心模块
├─ spring-boot                    (核心基础模块)
├─ spring-boot-autoconfigure      (自动配置模块)
├─ spring-boot-starters           (起步依赖模块)
├─ spring-boot-actuator           (生产监控模块)
├─ spring-boot-devtools           (开发工具模块)
├─ spring-boot-test               (测试支持模块)
├─ spring-boot-cli                (命令行工具)
└─ spring-boot-loader             (JAR启动加载器)

3. 核心模块详解

(1) spring-boot

职责:SpringBoot的核心基础模块,提供应用启动、配置加载、事件机制等基础能力。

核心类

spring-boot/
├─ SpringApplication              # 应用启动类
├─ SpringApplicationRunListener   # 启动过程监听器
├─ ApplicationContext             # 应用上下文抽象
├─ ConfigurableEnvironment        # 环境配置抽象
├─ ApplicationRunner              # 启动后执行接口
├─ CommandLineRunner              # 命令行启动后执行接口
├─ FailureAnalyzer                # 启动失败分析器
└─ Banner                         # 启动横幅

关键功能

// SpringApplication核心功能
public class SpringApplication {

    // 1. 推断应用类型(SERVLET/REACTIVE/NONE)
    private WebApplicationType deduceWebApplicationType();

    // 2. 加载初始化器
    private void setInitializers(Collection<? extends ApplicationContextInitializer<?>> initializers);

    // 3. 加载监听器
    private void setListeners(Collection<? extends ApplicationListener<?>> listeners);

    // 4. 运行应用
    public ConfigurableApplicationContext run(String... args);

    // 5. 准备环境
    private ConfigurableEnvironment prepareEnvironment(...);

    // 6. 刷新上下文
    private void refreshContext(ConfigurableApplicationContext context);
}

Maven依赖

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

(2) spring-boot-autoconfigure

职责:提供自动配置能力,包含130+个内置自动配置类,覆盖Web、数据库、缓存、消息队列等常用场景。

核心注解

@EnableAutoConfiguration    // 启用自动配置
@ConditionalOnClass         // 类存在时生效
@ConditionalOnBean          // Bean存在时生效
@ConditionalOnMissingBean   // Bean不存在时生效
@ConditionalOnProperty      // 配置属性匹配时生效
@ConfigurationProperties    // 绑定配置属性

典型自动配置类

spring-boot-autoconfigure/
├─ web/
│  ├─ servlet/
│  │  ├─ ServletWebServerFactoryAutoConfiguration
│  │  ├─ DispatcherServletAutoConfiguration
│  │  └─ HttpEncodingAutoConfiguration
│  └─ reactive/
│     └─ ReactiveWebServerFactoryAutoConfiguration
├─ jdbc/
│  ├─ DataSourceAutoConfiguration
│  ├─ JdbcTemplateAutoConfiguration
│  └─ DataSourceTransactionManagerAutoConfiguration
├─ orm/
│  └─ jpa/
│     └─ HibernateJpaAutoConfiguration
├─ data/
│  ├─ redis/
│  │  └─ RedisAutoConfiguration
│  ├─ mongodb/
│  │  └─ MongoAutoConfiguration
│  └─ elasticsearch/
│     └─ ElasticsearchRestClientAutoConfiguration
├─ amqp/
│  └─ RabbitAutoConfiguration
├─ kafka/
│  └─ KafkaAutoConfiguration
└─ cache/
   └─ CacheAutoConfiguration

加载机制(SpringBoot 3.0):

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
└─ 列出所有自动配置类全限定名

Maven依赖

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

(3) spring-boot-starters

职责:起步依赖模块,整合相关依赖,简化依赖管理。

常用Starter列表

Starter名称 功能描述 核心依赖
spring-boot-starter 核心Starter,包含自动配置、日志 spring-boot, spring-core, logback
spring-boot-starter-web Web开发(Spring MVC + Tomcat) spring-webmvc, tomcat-embed
spring-boot-starter-webflux 响应式Web开发 spring-webflux, reactor-netty
spring-boot-starter-data-jpa JPA数据访问 hibernate-core, spring-data-jpa
spring-boot-starter-data-redis Redis数据访问 lettuce, spring-data-redis
spring-boot-starter-data-mongodb MongoDB数据访问 mongodb-driver, spring-data-mongodb
spring-boot-starter-jdbc JDBC数据访问 HikariCP, spring-jdbc
spring-boot-starter-cache 缓存支持 spring-context-support
spring-boot-starter-amqp RabbitMQ消息队列 spring-amqp, rabbitmq-client
spring-boot-starter-validation 数据校验 hibernate-validator
spring-boot-starter-security Spring Security安全框架 spring-security-web
spring-boot-starter-aop AOP面向切面编程 spring-aop, aspectjweaver
spring-boot-starter-test 测试支持 junit, mockito, spring-test

Starter依赖关系示例

<!-- spring-boot-starter-web内部依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-json</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
</dependency>

(4) spring-boot-actuator

职责:提供生产级监控和管理能力,包括健康检查、指标收集、审计、HTTP追踪等。

核心端点

端点 功能 默认启用
/actuator/health 应用健康状态
/actuator/info 应用信息
/actuator/metrics 应用指标(JVM、HTTP、数据库等)
/actuator/env 环境变量和配置
/actuator/beans Spring Beans列表
/actuator/mappings URL映射列表
/actuator/loggers 日志配置(可动态修改)
/actuator/threaddump 线程转储
/actuator/heapdump 堆转储
/actuator/prometheus Prometheus格式指标

配置示例

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,env  # 暴露端点
  endpoint:
    health:
      show-details: always  # 显示详细健康信息
  metrics:
    export:
      prometheus:
        enabled: true  # 启用Prometheus指标导出

自定义健康检查

@Component
public class CustomHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        // 自定义健康检查逻辑
        boolean isHealthy = checkExternalService();

        if (isHealthy) {
            return Health.up()
                .withDetail("externalService", "available")
                .build();
        } else {
            return Health.down()
                .withDetail("externalService", "unavailable")
                .build();
        }
    }

    private boolean checkExternalService() {
        // 检查外部服务
        return true;
    }
}

Maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

(5) spring-boot-devtools

职责:开发工具模块,提供热重启、LiveReload、全局配置等开发便利功能。

核心功能

  1. 热重启(Hot Restart):代码修改后自动重启应用
  2. LiveReload:浏览器自动刷新
  3. 全局配置~/.spring-boot-devtools.properties
  4. 远程调试:支持远程应用调试

工作原理

代码修改
    ↓
ClassLoader检测到变化
    ↓
只重启应用ClassLoader(base ClassLoader不变)
    ↓
快速重启(1-2秒)

配置示例

spring:
  devtools:
    restart:
      enabled: true  # 启用热重启
      exclude: static/**,public/**  # 排除静态资源
    livereload:
      enabled: true  # 启用LiveReload

Maven依赖(仅开发环境):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    <scope>runtime</scope>
</dependency>

(6) spring-boot-test

职责:测试支持模块,整合JUnit、Mockito、AssertJ等测试框架。

核心注解

@SpringBootTest           // 启动完整的Spring上下文
@WebMvcTest               // 测试Spring MVC Controller
@DataJpaTest              // 测试JPA数据访问层
@JsonTest                 // 测试JSON序列化
@MockBean                 // Mock Bean
@SpyBean                  // Spy Bean
@TestConfiguration        // 测试配置类
@TestPropertySource       // 测试配置源

测试示例

@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private UserService userService;

    @Test
    public void testGetUser() throws Exception {
        // Mock数据
        User mockUser = new User(1L, "test");
        when(userService.getUserById(1L)).thenReturn(mockUser);

        // 执行测试
        mockMvc.perform(get("/users/1"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.name").value("test"));
    }
}

Maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

(7) spring-boot-loader

职责:JAR启动加载器,支持可执行JAR/WAR的加载和启动。

核心功能

  • 加载嵌套JAR(BOOT-INF/lib/下的依赖)
  • 加载应用类(BOOT-INF/classes/)
  • 提供自定义ClassLoader

可执行JAR结构

myapp.jar
├─ BOOT-INF/
│  ├─ classes/                   # 应用类
│  │  └─ com/example/Application.class
│  ├─ lib/                       # 依赖JAR
│  │  ├─ spring-boot-3.0.0.jar
│  │  ├─ spring-core-6.0.0.jar
│  │  └─ ...
│  └─ classpath.idx             # Classpath索引
├─ META-INF/
│  ├─ MANIFEST.MF                # 清单文件
│  └─ ...
└─ org/springframework/boot/loader/
   ├─ JarLauncher.class          # JAR启动器
   └─ ...

MANIFEST.MF内容

Manifest-Version: 1.0
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.example.Application
Spring-Boot-Version: 3.0.0
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/

启动流程

1. JVM执行Main-Class(JarLauncher)
         ↓
2. JarLauncher创建自定义ClassLoader
         ↓
3. 加载BOOT-INF/lib/下的依赖
         ↓
4. 加载BOOT-INF/classes/下的应用类
         ↓
5. 调用Start-Class的main方法(真正的启动类)

4. 模块依赖关系图

spring-boot-starter-web
  ├─ spring-boot-starter
  │   ├─ spring-boot
  │   ├─ spring-boot-autoconfigure
  │   └─ logback
  ├─ spring-boot-starter-json
  ├─ spring-boot-starter-tomcat
  ├─ spring-web
  └─ spring-webmvc

应用JAR
  ├─ spring-boot-loader (打包时引入)
  └─ BOOT-INF/lib/ (所有依赖)

5. 版本号统一管理

spring-boot-dependencies

<!-- 父POM统一管理所有依赖版本 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.0</version>
</parent>

内部依赖版本管理

<properties>
    <spring-framework.version>6.0.0</spring-framework.version>
    <tomcat.version>10.1.0</tomcat.version>
    <hibernate.version>6.1.0.Final</hibernate.version>
    <jackson.version>2.14.0</jackson.version>
</properties>

6. 面试答题要点总结

八大核心模块

  1. spring-boot:核心基础,提供SpringApplication、事件机制、配置加载
  2. spring-boot-autoconfigure:自动配置,130+自动配置类
  3. spring-boot-starters:起步依赖,简化依赖管理
  4. spring-boot-actuator:生产监控,健康检查、指标收集
  5. spring-boot-devtools:开发工具,热重启、LiveReload
  6. spring-boot-test:测试支持,整合JUnit、Mockito
  7. spring-boot-cli:命令行工具,Groovy脚本快速开发
  8. spring-boot-loader:JAR加载器,支持可执行JAR

模块关系

  • spring-boot是基础,所有模块依赖它
  • spring-boot-autoconfigure提供自动配置能力
  • starters整合相关依赖和自动配置
  • actuatordevtoolstest是可选功能模块

一句话总结:SpringBoot核心模块包括基础的spring-boot、自动配置的autoconfigure、依赖整合的starters、生产监控的actuator、开发工具devtools、测试支持test、命令行工具cli和JAR加载器loader,共同构成了完整的SpringBoot生态。