真实面经题目 · 原创解析
Spring 和 Spring Boot 有什么区别?
Spring 是基础框架和生态体系,核心价值在于 IoC 容器、AOP、事务管理、MVC、数据访问等通用能力;Spring Boot 不是替代 Spring,而是在 Spring 之上提供约定优于配置的应用启动脚手架,通过自动配置、starter 依赖、内嵌服务器、外部化配置和运行监控,降低搭建与运维成本。
真实面经题目 · 原创解析
Spring 是基础框架和生态体系,核心价值在于 IoC 容器、AOP、事务管理、MVC、数据访问等通用能力;Spring Boot 不是替代 Spring,而是在 Spring 之上提供约定优于配置的应用启动脚手架,通过自动配置、starter 依赖、内嵌服务器、外部化配置和运行监控,降低搭建与运维成本。
Spring 和 Spring Boot 的区别可以从定位、使用方式和解决的问题来回答。Spring 更像一个完整的企业级开发框架和生态,核心是 IoC 容器和 AOP,围绕它扩展出事务管理、Spring MVC、数据访问、缓存、安全等能力。它解决的是如何组织对象、解耦业务、声明式管理事务和集成企业级组件的问题。Spring Boot 则是在 Spring 体系之上的快速应用开发框架,它不改变 Spring 的核心能力,而是把常见配置、依赖组合和启动方式标准化。通过自动配置,它会根据类路径、配置项和条件注解决定创建哪些 Bean;通过 starter,它把常用依赖按场景打包;通过内嵌 Tomcat、Jetty 等服务器,它让 Web 应用可以直接以可执行程序方式运行;通过外部化配置和 Actuator,它提升了配置管理和生产可观测性。所以一句话概括:Spring 提供基础能力和编程模型,Spring Boot 提供更低成本的装配、启动和生产化能力。面试中还要强调,Spring Boot 不是零配置,也不是不能自定义;它是默认配置优先,业务需要时仍然可以覆盖 Bean、调整配置属性、排除自动配置,甚至回到传统 Spring 配置方式。
Spring 是基础框架和生态,提供企业级应用开发的核心编程模型;Spring Boot 是基于 Spring 的快速开发与启动框架,重点解决项目创建、依赖组合、默认配置、运行启动和生产化接入的问题。
Spring 重点提供 IoC、AOP、事务、MVC、数据访问、缓存、安全等底层能力,帮助开发者组织对象、解耦模块和管理横切逻辑。Spring Boot 不重写这些能力,而是降低它们的装配和使用成本。
传统 Spring 往往需要较多 XML 或 JavaConfig,开发者要显式声明很多 Bean 和组件配置。Spring Boot 通过约定优于配置减少样板配置,根据类路径、配置属性和条件注解决定默认装配。
使用 Spring 时,开发者常常需要自己组合依赖并处理版本兼容。Spring Boot 通过 starter 把一类场景所需依赖打包,并通过依赖版本管理降低冲突概率,例如 web、data、security、actuator 等场景。
传统 Spring Web 项目常部署到外部 Servlet 容器,部署形态和容器环境耦合更明显。Spring Boot 支持内嵌服务器,应用可以打包成可执行程序直接启动,更适合独立服务、微服务和容器化部署。
Spring 本身提供组件能力,Spring Boot 则根据类路径、条件注解和配置属性自动创建常用 Bean。自动配置不是不可控的黑盒,开发者可以通过自定义 Bean、配置属性或排除自动配置来覆盖默认行为。
Spring 更关注开发框架能力;Spring Boot 额外提供 Actuator、健康检查、指标暴露、外部化配置、应用信息和运行状态端点等生产准备能力,使服务上线后的观测和运维更标准化。
Spring Boot 依赖 Spring,不是替代 Spring。学会 Spring Boot 并不意味着可以跳过 Spring 容器、Bean 生命周期、AOP、事务传播和自动装配原理;排查复杂问题时仍然要回到 Spring 基础机制。
Spring Boot 提升效率和一致性,但默认行为更多,排查问题时需要理解自动配置生效条件和覆盖机制。复杂系统中不能盲目依赖默认配置,还要清楚线程池、连接池、安全、序列化和事务等关键配置的边界。
自动配置会根据类路径依赖、条件注解、配置属性和已有 Bean 判断是否创建默认 Bean。它本质上是条件化的配置类集合,能被用户自定义 Bean 或排除规则覆盖。
starter 是面向场景的依赖组合,通常不只引入一个 jar,而是把 Web、数据访问、安全等场景所需依赖和版本管理打包起来,减少手工组合和版本冲突。
可以在启动注解上使用 exclude,或通过配置属性排除指定自动配置类。更细粒度的场景也可以提供自己的 Bean,让条件装配中的默认 Bean 不再生效。
很多自动配置类会在缺少某个 Bean 时才创建默认实现。开发者声明同类型或指定名称的 Bean 后,自动配置条件不再满足,从而使用自定义实现。
它可以引入内嵌 Servlet 容器,并在应用启动时初始化 Web 环境、注册 DispatcherServlet 和相关组件,所以不需要单独部署到外部应用服务器才能运行。
Actuator 提供健康检查、指标、应用信息、环境配置和运行状态端点,帮助服务接入监控、探活、告警和运维体系,是 Spring Boot 生产化能力的一部分。