1. 定位与目标
• Spring Framework
• 企业级开发框架:提供全面的基础设施支持(如依赖注入、AOP、事务管理等),帮助构建复杂的企业级应用。
• 灵活性高:需要开发者手动配置各种组件(如数据源、MVC、安全等),适合对架构有深度定制需求的场景。
• Spring Boot
• 快速开发的脚手架:基于“约定优于配置”的理念,简化 Spring 应用的初始搭建和开发流程。
• 开箱即用:通过自动配置、内嵌服务器、起步依赖(Starters)等特性,让开发者快速构建独立运行的微服务或单体应用。
2. 核心区别
| 特性 | Spring | Spring Boot |
|---|---|---|
| 配置方式 | 需手动配置 XML 或 Java Config | 自动配置(基于类路径和 Starter 依赖) |
| 内嵌服务器 | 无,需部署到外部服务器(如 Tomcat) | 支持内嵌 Tomcat/Jetty/Undertow |
| 依赖管理 | 需手动管理依赖版本 | 通过 Starter 包自动传递依赖,版本统一 |
| 部署方式 | 打包成 WAR,部署到应用服务器 | 打包成 JAR,直接通过 main() 方法运行 |
| 监控与管理 | 需集成 Spring Actuator 等工具 | 内置 Actuator,提供健康检查、监控端点 |
| 适用场景 | 复杂企业级应用(需深度定制) | 快速开发、微服务、云原生应用 |
3. 典型场景对比
Spring 项目搭建
- 手动配置
DispatcherServlet、数据源、事务管理器等。 - 需解决依赖冲突,例如不同库的版本兼容性问题。
- 部署时需要将 WAR 包放到 Tomcat 等服务器中。
Spring Boot 项目搭建
- 使用
spring-boot-starter-web自动引入 Web 依赖和内嵌 Tomcat。 - 通过
application.properties或 YAML 文件简化配置。 - 直接运行
main()方法启动应用,无需外部服务器。
4. 核心优势
• Spring Boot 的优势
• 快速启动:适合原型设计、小型项目或微服务。
• 减少样板代码:自动配置避免了重复的 XML 或 Java Config。
• 生态整合:无缝集成 Spring 全家桶(如 Spring Data、Spring Security)。
• Spring 的优势
• 完全控制权:适合需要高度定制化的场景(如自定义数据源、安全策略)。
• 模块化设计:按需选择模块(如只使用 Spring Core 或 Spring MVC)。
5. 总结
• Spring Boot 是 Spring 的扩展:并非替代关系,而是基于 Spring 的封装,简化开发流程。
• 选择依据:
• 需要快速开发、轻量级部署 → Spring Boot。
• 需要深度定制底层组件 → Spring Framework。
两者通常结合使用,Spring Boot 的底层依然依赖 Spring Core、Spring MVC 等模块。