SpringBoot的前世今生
背景
作为一名Java开发人员,我们最常打交道的就是Spring、SpringBoot这类的开发框架,你知道Spring Boot的由来吗,它和Spring的区别又是什么呢,这是我们需要知道的,让我们娓娓道来。
随着使用Spring Famework进行开发的企业和个人越来越多,Spring也慢慢从一个单一简洁的小框架变成了一个大而全的开源软件,Spring Framework的边界不断进行扩张,到了现在Spring几乎开源做任何事情。目前大部分开源组件和中间件都有Spring的对应组件支持。
如果你去关注Spring的官网,你就会发现它的solgan是:
Spring makes Java Simple
虽然Spring的组件是轻量级的,但是它的配置确是重量级的,Spring每集成一个开源软件,就需要增加一些配置,慢慢的随着我们的开发的项目越来越庞大,往往需要集成很多的开源软件,太多的配置非常难以理解,并容易配置出错,这个给开发人员带来了不小的负担。
起因
你想象一下,在以前你需要用spring开发一个简单的Hello World程序,应该是哪些步骤呢?
- 创建项目结构,包含依赖Maven或者Gradle的构建文件。
- 需要添加Spring MVC和Servlet API的依赖
- web.xml 声明Spring的DispacherServlet
- Controller类,响应Http请求
- 部署应用程序的web应用服务器,比如Tomcat
整个过程中,只有一个东西与Hello Word功能相关,就是Controller,剩下的都是Spring开发Web应用程序必备的通用模板,既然所有Spring Web应用程序都要用到他们,那为什么你还要提供这些东西?
所以,2012年10月,一个叫Mike Youngstrom(扬斯特罗姆)在Spring Jira中创建了一个功能请求,要求在Spring Framework中支持无容器Web应用程序体系结构,他谈到了在主容器引导 spring 容器内配置 Web 容器服务。
https://jira.spring.io/browse/SPR-9888
I think that Spring’s web application architecture can be significantly simplified if it were to provided tools and a reference architecture that leveraged the Spring component and configuration model from top to bottom. Embedding and unifying the configuration of those common web container services within a Spring Container bootstrapped from a simple main() method. 我认为,如果要提供从上到下充分利用Spring组件和配置模型的工具和参考体系结构,则可以大大简化Spring的Web应用程序体系结构。在通过简单main()方法引导的Spring容器中嵌入和统一那些通用Web容器服务的配置。
而且Spring开发团队也意识到这些问题,急需一套软件来解决这个问题,而这个时候微服务的概念也慢慢的起来,快速开发独立的小应用程序也变得很急迫。
而Spring恰好处在这样一个交叉点上,所以顺势而为在2013年初的时候,开始投入Spring Boot项目的研发,直到2014年4月,Spring Boot1.0版本发布。从那以后,Spring Boot开启了一些列的迭代和升级的过程。
经过7年时间的发展,到目前为止,Spring Boot最新稳定版为2.6.0版本。
发展
Spring Boot刚出生的时候,引起了很多开源社区的关注,并且也有个人和企业开始尝试使用Spring Boot。 其实直到2016年,Spring Boot才真正在国内被使用起来。我之前在挖财的时候,2015年公司就开始采用Spring Boot来构建基于Dubbo的微服务架构。到现在,Spring Boot几乎是所有公司的第一选择。
Build Anything
Spring Boot被官方定位为“BUILD ANYTHING”,Spring Boot官方的概述是这么描述Spring Boot的。
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”. // 通过Spring Boot可以轻松的创建独立的、生产级别的基于Spring 生态下的应用,你只需要运行即可。 We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration. //对于Spring平台和第三方库,我们提供了一个固化的视图,这个视图可以让我们在构建应用是减少很多麻烦。大部分spring boot应用只需要最小的Spring 配置即可。
如果大家不习惯看英文文档,可能理解起来比较复杂,翻译成人话就是:Spring Boot能够帮助使用Spring Framework生态的开发者快速高效的构建一个基于Spring以及spring 生态体系的应用。
Spring框架架构图

约定优于配置
Spring Boot是约定优于配置理念下的产物,那什么是约定优于配置?
约定优于配置是一种软件设计范式,主要是为了减少开发人员需要决定的数量,获得简单的好处又不失灵活性。
简单来说,就是你所使用得工具默认会提供一种约定,如果这个约定和你的期待符合,就可以省略哪些基础的配置,否则你就需要通过配置来达到你所期待的方式。
而相对技术来说,约定还有很多地方的体现,比如一个公司会有专门的文档格式、代码提交规范、接口命名规范、数据库规范等等。这些规定的意义就是让整个项目的可读性和可维护性更强。
Spring Boot Web 应用约定优于配置的场景:
- Spring Boot 的项目结构约定,默认采用Maven的目录结构
- 内置嵌入式的Web容器,支持四种嵌入式Web容器:Tomcat、Jetty、Undertow、Reactor
- 默认提供两种配置文件,application.properties和application.yml
- 通过starter依赖,来减少第三方jar的依赖
Spring Boot的特性
EnableAutoConfiguration
EnableAutoConfiguration 是 SpringBoot的一个特性,可以根据classpath的jar依赖,自动注册Bean,一般用于类或接口上。
Starter
Starter 可以理解为启动器,它包含一系列可以集成到应用的依赖包,可以一站式集成Spring 和 其他技术,而不需要找到示例代码和依赖包。
Actuator
Actuator 是Spring Boot 程序的监控系统,可以实现健康检查、info信息等。
Spring Boot CLI
Spring Boot CLI为Spring Cloud提供了 命令行功能。
总结
Spring Boot能够帮助使用Spring Framework生态的开发者快速高效的构建一个基于Spring以及spring 生态体系的应用。Spring Boot的内核还是Spring Framework。
