跳转到内容

SpringBoot框架

💡

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是简化Spring应用的初始搭建以及开发过程。核心理念:约定优于配置(Convention over Configuration),开箱即用。


一、Spring Boot 核心特性

1.1 四大核心

特性

说明

自动配置(Auto-configuration)

根据classpath中的依赖自动配置Spring应用。如classpath有H2→自动配置DataSource;有Thymeleaf→自动配置模板引擎

起步依赖(Starter)

一站式引入依赖。spring-boot-starter-web引入SpringMVC+Tomcat+Jackson等全套Web开发依赖

内嵌容器

支持内嵌Tomcat/Jetty/Undertow,直接java -jar运行,无需部署WAR到外部Servlet容器

Actuator监控

提供生产级监控端点:健康检查、指标、环境信息、日志级别动态调整等

1.2 Spring Boot vs 传统Spring

对比

传统Spring

Spring Boot

项目搭建

手动配置web.xml、applicationContext.xml、springmvc.xml

引入starter即可,零XML配置

依赖管理

手动引入每个依赖并处理版本冲突

spring-boot-starter-parent统一管理版本

部署运行

需外部Tomcat,打WAR包部署

内嵌Tomcat,java -jar直接运行

配置方式

XML配置为主

注解 + yml/properties


二、自动配置原理

2.1 核心注解链

📌

@SpringBootApplication = @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan

@EnableAutoConfiguration 工作机制

  1. @EnableAutoConfiguration → @Import(AutoConfigurationImportSelector.class)
  2. AutoConfigurationImportSelector 读取 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(Spring Boot 2.7前为spring.factories)
  3. 文件中列出了所有自动配置类(约150+个),如DataSourceAutoConfiguration、WebMvcAutoConfiguration
  4. 每个配置类通过 @ConditionalOnClass / @ConditionalOnMissingBean / @ConditionalOnProperty 等条件注解判断是否生效
  5. 如 DataSourceAutoConfiguration 判断 classpath 有DataSource类且未手动定义DataSource Bean → 自动创建HikariCP数据源

2.2 条件注解体系

条件注解

作用

@ConditionalOnClass

classpath存在指定类时生效

@ConditionalOnMissingBean

IoC容器中不存在指定Bean时生效

@ConditionalOnBean

容器中存在指定Bean时生效

@ConditionalOnProperty

配置文件中有指定属性且匹配值时生效

@ConditionalOnMissingClass

classpath不存在指定类时生效

@ConditionalOnJava

指定Java版本时生效

@ConditionalOnWebApplication

Web应用环境下生效

2.3 如何自定义Starter

  • 命名规范:官方:spring-boot-starter-xxx;自定义:xxx-spring-boot-starter
  • 结构:autoconfigure模块(含AutoConfiguration类+META-INF/spring/xxx.imports)+ starter模块(空jar,仅pom引入autoconfigure和第三方依赖)
  • 核心:@Configuration + @EnableConfigurationProperties(XxxProperties.class) + @ConditionalXXX + @Bean提供核心Bean

三、配置文件

3.1 application.yml vs application.properties

对比

.properties

.yml

格式

key=value,线性

阶梯缩进,树状层级

可读性

平铺冗长

层级清晰,推荐

多环境

多文件拆开

单文件---分隔多profile

Map/List

写法繁琐

原生支持

3.2 多环境配置

  • application.yml:公共配置 + spring.profiles.active: dev 指定激活环境
  • application-dev.yml / application-prod.yml:各环境专属配置,覆盖公共配置
  • 优先级(高→低):命令行参数 → 环境变量 → application-{profile}.yml → application.yml

3.3 @ConfigurationProperties 类型安全配置


四、常用Starter一览

Starter

作用

spring-boot-starter-web

Web开发(SpringMVC + Tomcat)

spring-boot-starter-test

测试(JUnit5 + Mockito + AssertJ)

spring-boot-starter-data-redis

Redis数据访问(Lettuce默认连接)

spring-boot-starter-data-jpa

JPA(Hibernate)数据访问

mybatis-spring-boot-starter

MyBatis整合

spring-boot-starter-validation

参数校验(Hibernate Validator)

spring-boot-starter-actuator

生产监控端点

spring-boot-starter-security

Spring Security安全框架

spring-boot-starter-aop

AOP支持(@Aspect注解)

spring-boot-starter-amqp

RabbitMQ消息

spring-boot-starter-cache

缓存抽象(支持Redis/Caffeine/Ehcache等)

spring-boot-starter-mail

邮件发送


五、Actuator 生产监控

5.1 常用端点

端点

作用

/actuator/health

健康检查(UP/DOWN),可级联检查DB/Redis等组件状态

/actuator/info

应用信息(自定义版本号/构建信息等)

/actuator/metrics

指标列表(JVM内存/GC/线程/HTTP请求等)

/actuator/env

环境变量/配置属性

/actuator/loggers

日志级别查看与动态修改(POST请求修改)

/actuator/threaddump

线程快照dump(排查死锁/线程阻塞)

/actuator/heapdump

堆内存dump(OOM排查)

/actuator/beans

Spring容器中所有Bean列表

/actuator/mappings

所有@RequestMapping路径列表

💡

安全提醒:生产环境不要暴露全部端点到公网!通常只暴露health/info给负载均衡器探活,敏感端点需配置Spring Security + management.endpoints.web.exposure.include。


六、核心注解汇总

注解

作用

@SpringBootApplication

主应用类注解,包含@Configuration + @EnableAutoConfiguration + @ComponentScan

@Configuration

声明配置类,配合@Bean创建Bean(proxyBeanMethods=true时为CGLIB代理)

@Bean

方法返回的对象纳入Spring容器管理

@ComponentScan

组件扫描路径(默认扫描主类所在包及其子包)

@ConditionalOnProperty

根据配置决定是否启用某配置

@Import

导入其他配置类或实现ImportSelector的类

@ImportResource

导入XML配置文件(遗留系统兼容)


七、跨域、拦截器、全局异常

7.1 跨域配置(CORS)

7.2 拦截器注册

7.3 全局异常处理


八、Servlet容器原理

8.1 内嵌Tomcat启动流程

  1. SpringApplication.run() → 创建ApplicationContext
  2. AbstractApplicationContext.refresh() → onRefresh() → 调用createWebServer()
  3. ServletWebServerFactory(TomcatServletWebServerFactory)创建Tomcat实例
  4. 配置Connector(端口、协议)、配置Context(应用路径)、注册Servlet Filter
  5. DispatcherServlet自动注册到Tomcat
  6. Tomcat.start() → 监听端口,就绪接收请求

8.2 切换容器


九、Spring Boot 3.x 新特性

特性

说明

JDK 17 基线

最低要求JDK 17,充分利用Record/Sealed Class/Pattern Matching等特性

Jakarta EE 9+

包名从javax.* 迁移到 jakarta.*(javax.servlet → jakarta.servlet)

原生镜像支持

Spring Native + GraalVM AOT编译,启动时间亚秒级,内存大幅降低

虚拟线程支持

3.2+支持JDK 21虚拟线程(Virtual Threads)配置:spring.threads.virtual.enabled=true

ProblemDetail

RFC 7807标准错误响应格式(ErrorResponse规范)

HttpExchange

声明式HTTP客户端(类似OpenFeign),@HttpExchange标注接口方法

Observability

Micrometer Tracing,整合Trace/Metrics/Logs三位一体可观测性


面试高频:

  1. 自动配置原理(@EnableAutoConfiguration + spring.factories/imports + 条件注解)
  2. Spring Boot启动流程(SpringApplication.run()内部步骤)
  3. Starter机制(如何自定义一个Starter)
  4. 配置文件加载优先级
  5. @ConfigurationProperties vs @Value
  6. 内嵌Tomcat原理
  7. Spring Boot 3.x 重大变更(JDK17/Jakarta/虚拟线程)