← 每日面试题 学习看板

SpringBoot和Spring的区别是什么?

面试题/00java/04 框架/01Spring/04Spring Boot特性/SpringBoot和Spring的区别是什么?.md

面试记录 2026-09-28

题目:SpringBoot和Spring的区别是什么?

难度:difficulty/low

标签:spring/boot, general/knowledge, difficulty/low

评分:⭐⭐⭐⭐☆(4/5)

我的回答

Spring Boot 是 Spring 的一个封装,它把大量的 Spring 的衍生功能、常用的功能都封装起来,让你可以即时的启用,直接即拿即用。通过简单的配置就可以启用对应的功能,快速的启动服务,简单的开发,提高研发的效率。并且它把项目的架构基本都设计好了,在它内部有比较规范的设定,按它的规范填充业务,可以很快速的完成业务开发。它的核心在于约定大于配置,很多东西它是规约好了,你不需要配置,你想改你就可以改,但是不改的情况下,它会有一个自己行,有行业内的默认配置去帮助你使用。另外就是他把大量的功能封装成了一个个 star,方便大家使用,直接引入就可以进行正常的使用。

点评

优点:

不足:

补充:

维度SpringSpring Boot
配置方式大量 XML/JavaConfig,繁琐约定大于配置,@SpringBootApplication 一个注解跑起来
自动配置需手动组装AutoConfiguration + 条件注解自动装配
部署方式WAR 部署到外部 Tomcat内嵌容器,java -jar 直接跑
依赖管理手动配版本,易冲突Starter 一站式 + BOM 依赖锁定

加分项:Spring Boot 不是独立框架,它依然依赖 Spring 的 IoC、AOP、MVC 等核心,只是把"搭建过程"标准化了。

完整讲解

第一部分:知识重点剖析

核心考点定位:考察对 Spring Boot 设计哲学的理解,以及是否清楚其内部自动配置的机制。

知识点拆解:

  1. 本质定位:Spring Boot 不是新框架,而是基于 Spring 的快速启动/开箱即用工具,核心依然是 Spring 的 IoC、AOP、MVC 等
  2. @SpringBootApplication 拆解:
  1. 自动配置机制:
  1. Starter 机制:
  1. 内嵌容器:Tomcat、Jetty、Undertow 被打包进应用 JAR/WAR,java -jar xxx.jar 直接启动,无需部署到外部 Servlet 容器;这是 Spring Boot 生产部署最大便利
  2. 配置外部化:application.yml → application-{profile}.yml → 命令行参数 → 环境变量 → 配置中心(Nacos/Apollo),按优先级覆盖
  3. Actuator:提供 /actuator/health、/actuator/info、/actuator/metrics、/actuator/env 等生产级端点,支持健康检查、指标暴露、优雅停机
  4. 生态延伸:Spring Cloud(微服务治理)建立在 Spring Boot 之上,Spring Security / Spring Data / Spring Task 等也是 Spring Boot 常见集成

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. 自动配置是怎么"生效又不过度装配"的?请以 @ConditionalOnMissingBean 为例说明
  1. Spring Boot 3 相比 2 有哪些核心变化?为什么移除了 spring.factories?
  1. 如何在自己的项目里做一个自定义 Starter?

第三部分:面试者参考回答(300-600 字口语化)

面试官您好,Spring Boot 本身不是一个独立框架,它是基于 Spring 做的一整套"快速启动 + 开箱即用"的工具链。它的核心价值是把 Spring 传统开发中繁琐的 XML/JavaConfig 配置、依赖版本协调、容器部署等负担都收敛掉了。

从核心机制上讲,Spring Boot 提供了 @SpringBootApplication 这个顶层注解,它内部相当于三个组合:@SpringBootConfiguration(本质是 @Configuration)+ @EnableAutoConfiguration(启用自动配置)+ @ComponentScan(扫描启动类所在包)。自动配置是它最精髓的部分——启动时通过 AutoConfigurationImportSelector 扫描所有 starter jar 里的自动配置类,然后用 @ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty 这些条件注解决定是否生效。也就是说,Spring Boot 会"猜你想用":classpath 里有 spring-webmvc 它就自动装配 DispatcherServlet;你自己在配置类里显式 @Bean 声明了 DataSource,它就用你的、不用默认的。这就是"约定大于配置但可覆盖"的底层实现。

从工程实践上讲,Spring Boot 有几个杀手级能力:

第一,Starter 依赖,比如 spring-boot-starter-web 一个依赖就打包了 webmvc、内嵌 tomcat、jackson、spring-web 等一整套,配合 BOM 管理版本,彻底解决了 Maven 依赖版本冲突的历史痛点。

第二,内嵌容器,Tomcat/Jetty/Undertow 被打包进 JAR,直接 java -jar 就能跑,不需要部署到外部 Tomcat,这是生产部署最大的便利。

第三,配置外部化,application.yml 支持 profile 分环境、命令行参数、环境变量、配置中心(Nacos/Apollo)层层覆盖。

第四,Actuator 监控,内置 /actuator/health、/metrics、/info 等生产端点,配合 Spring Boot Admin 就能搭建一套完整的服务监控体系。

到 Spring Boot 3 又有一些新变化:包名从 javax. 迁移到 jakarta.、支持 GraalVM 原生镜像、支持虚拟线程(@EnableVirtualThreads)、spring.factories 被 AutoConfiguration.imports 取代以支持延迟加载。总之,Spring Boot 不是替代 Spring,而是把 Spring 的搭建过程标准化了,让我们能专注于业务而不是配置。