Spring Boot 出现前的开发困境
配置繁琐
- 大量的 XML 配置文件
- Spring 是一个非常优秀的轻量级框架,但其配置却是重量级的
- 需要编写大量的 XML 配置文件或注解配置,使项目配置复杂且难以维护
- 配置文件中容易出现错误,且排查问题困难
- 开发过程中需要编写很多样板代码,降低了开发效率
依赖xml或者java配置类导入外部bean:
依赖管理复杂
- 依赖关系难以处理
- 需要手动分析和导入各种库的坐标
- 还需要考虑不同库之间的依赖关系和版本兼容性问题
- 选错依赖版本会导致不兼容问题,严重阻碍项目开发进度
- 例如 Spring 5.0 以上只能使用 Junit 4.12 以上的版本
部署和运行复杂
- 需要外部 Web 容器
- 传统 Spring 应用需要部署在 Tomcat、Jetty 等 Web 容器中
- 部署过程繁琐,需要额外的配置和管理
- 增加了运维复杂度和出错几率
SpringBoot 的优势
自动配置
- 约定大于配置
- SpringBoot 对 Spring 的缺点进行改善和优化,基于"约定大于配置"的思想
- 大幅减少了手动配置的数量,提供了最优的默认配置
- 自动配置 Spring 应用程序所需的各种依赖和设置
- 开发者可以覆盖默认值以满足特定需求
起步依赖
- 简化依赖管理
- SpringBoot 的依赖是基于功能的,而不是基于 JAR 包的
- 将完成一个功能所需要的所有坐标打包到一起,并完成了版本适配
- 使用某功能时只需引入一个依赖即可,避免了版本冲突
- 极大简化了 Maven 或 Gradle 的依赖配置
内嵌服务器
- 独立运行
- 内嵌 Servlet 容器(如 Tomcat、Jetty 等),无需单独安装和配置服务器
- 可以将应用程序打包成可执行的 JAR 或 WAR 文件,直接运行
- 提高了部署的便捷性,减少了环境差异带来的问题
生产就绪功能
- 提供非功能特性
- 内置指标监控(Actuator),提供应用运行时信息
- 健康检查,查看应用状态
- 外部化配置,便于在不同环境中使用相同的应用代码
快速开发
- 提高开发效率
- 减少了配置和搭建环境的时间
- 开发者可以专注于业务逻辑的实现
- 支持热部署,提高开发过程中的效率
SpringBoot 的实际应用场景
-
微服务架构
- SpringBoot 为构建微服务提供了丰富的支持
- 便于与 Spring Cloud 等微服务框架集成
- 帮助开发人员轻松构建分布式系统
-
Web 应用开发
- 可以快速搭建 RESTful API 服务
- 集成各种前端模板引擎,如 Thymeleaf、FreeMarker 等
- 支持各种 Web 开发场景
-
企业应用集成
- 易于集成常见的企业应用框架和工具
- 提供与各种数据源和消息系统的连接
- 支持批处理、任务调度等企业级需求
Spring与Spring Boot的对比
特性 | Spring | Spring Boot |
---|---|---|
项目初始化 | 手动配置 | 使用 Spring Initializr 快速生成 |
配置方式 | XML 或 Java 配置 | 自动配置 + 外部化配置 |
Web 开发 | 手动配置 DispatcherServlet | 自动配置 DispatcherServlet |
内嵌服务器 | 需要外部服务器 | 内嵌服务器 |
依赖管理 | 手动管理 | Starter 依赖 + 自动依赖管理 |
监控和管理 | 需要手动集成 Actuator | 内置 Actuator |