一个完善的应用程序,常常需要这些特性:精简明确的配置,快速集成第三方组件,统一的打包部署方式,方便单元测试/功能测试,良好的监控能力等。Spring Boot出现之前,这些都需要开发者自行摸索解决,得到的方案可能大同小异,在尝到“约定大于配置”的好处后,人们自然不甘于此,于是Spring Boot应运而生。
1. Spring Boot是什么
Spring Boot的设计目的是用来简化新Spring应用的初始搭建以及开发过程,快速创建生产级的基于Spring的应用程序,达到开箱即用的效果。它具有以下主要特性:
- 为所有Spring开发提供一个更快、更广泛的入门体验。
- 开箱即用,Spring Boot拥有合理的默认值,同时又能快速响应需求的变化。
- 提供对大型项目(如嵌入式服务器、安全性、指标监控、健康检查和外部化配置)常见的一系列非功能性特性。
- 绝对没有代码生成,也不需要XML配置
2. Spring Boot提供的功能
在官方文档的基础上,笔者以表格的形式罗列Spring Boot下的所有module,使读者对其有一个完整印象。
自上而下的全局印象,往往比细节更为重要。当然,具体的细节讨论及使用,后续的文章中也会逐一分析。
module | 说明 | 重要程度 |
---|---|---|
spring-boot | 核心库,提供基础功能 | ⭐️ ⭐️ ⭐️ ⭐️ ⭐️ |
spring-boot-autoconfigure 和 spring-boot-starters | 使用autoconfigure提供自动配置功能;使用Starter达到快速集成的目的 | ⭐️ ⭐️ ⭐️ ⭐️ ⭐️ |
spring-boot-actuator 和 spring-boot-actuator-autoconfigure | 生产级的非功能性特性,一些监控、健康检查等功能 | ⭐️ ⭐️ ⭐️ ⭐️ ⭐️ |
spring-boot-test 和 spring-boot-test-autoconfigure | 基于spring boot的测试支持 | ⭐️ ⭐️ ⭐️ ⭐️ |
spring-boot-parent 和 spring-boot-dependencies | 是所有其他module的父节点,使依赖版本在同一位置管理 | ⭐️ ⭐️ ⭐️ ⭐️ |
spring-boot-devtools | 开发者工具集,包含自动重启、浏览器自动刷新、远程调试等功能 | ⭐️ ⭐️ ⭐️ |
spring-boot-tools | maven/gradle插件、可执行jar等功能 | ⭐️ ⭐️ ⭐️ |
spring-boot-cli | 提供一套命令行工具 | ⭐️ ⭐️ |
spring-boot-properties-migrator | 帮助开发者从低版本升级到Spring Boot 2.0 | ⭐️ |
spring-boot-docs | 指定java doc的内容及样式 | ⭐️ |
3. Spring Boot与Spring其它project的对比
Spring的生态比较庞大,点击官网项目列表可以查看这些项目(主要项目甚至还都设计了一个logo ^_^)。一些初学者可能会有一些概念上的混淆,在此做一些简单的比较。
3.1 Spring Boot vs Spring Cloud
Spring Cloud是一个基于Spring Boot实现的一系列框架的有序集合,是一个关注全局的服务治理框架。
Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。
下图是官网截取的,以帮助理解:
3.2 Spring Boot vs Spring Framework
Spring Framework是一个轻量级、非侵入式、一站式、模块化的开发应用框架。Spring Boot基于Spring Framework开发,不能单独存在。
下图是官网截取的,以帮助理解:
3.3 Spring Boot vs Spring MVC
Spring MVC是Spring Framework中处理web请求的一个模块,是Spring Framework的一部分。层级是这样的:
Spring MVC >> Spring Framework >> Spring Boot
4 小结
本文从顶层向下观察整个Spring Boot的构成,旨在使读者对Spring Boot的各个功能有一个大致的了解。
其提供的功能中,笔者认为Auto-configuration最为精妙好用,其它特性虽好但很多公司也已经有替代的解决方;而自动配置机制却的推出却让人有一种拨云见月、眼前一亮的感觉。
后面的文章中,我们将仔细介绍Auto-configuration和在此之上的Staters。