1. 前言
- Spring 官方文档
- 本文的
Spring
指的是Spring Framework 5
,简单介绍其组成,后文将不再展开。
Spring Framework 5
整合了许多功能,其中开发用得最多:
Spring Core
提供了的IOC容器
。
Spring MVC
运用MVC编程模式,在IOC容器
的基础上为了支持Web开发
,提供了 许多注解和Api。 - 需要充分了解了maven或gradle 才可以更好得了解Spring Boot (可运行jar包和依赖外部tomcat环境的不同)
- 文章按照解决以下疑问的方式进行展开。
为什么有了Spring Framework 5
还需要Spring Boot
?(Spring Boot
的特性)
什么是微服务?Spring Boot
、Spring Cloud
和微服务的关系 ?
2. Spring Boot 的特性
这里的特性指的是,区别于Spring Framework 5
的特性。
2.1 直观表现:内置服务器
比较老的项目SSM
和 SSH
项目都需要Tomcat
等服务器软件为Java Web 程序的的容器。
但是Tomcat
是什么什么写的?——Java
。既然Spring Framework
与 Tomcat
同根同源,又是实际上开发的标准套件,于是Spring Boot
就将两者整合到一起。有了内置的Tomcat java代码及Api
,通过Maven
或 Gradle
打包工具,把Spring Boot 打成jar
包 (也可以是war这里就不讨论),接着在服务器端执行一行bash既可以启动Web服务。
java -jar test.jar
2.2 内在原理:起步依赖与自动装配
2.2.1 起步依赖 spring-boot-starter-parent
所有Spring Boot
工程必须都有的 spring-boot-starter-parent
,这种命名规范的依赖包,就是起步依赖。即是Spring Boot
团队考量了兼容性和实用性后提供的标准化启动库。解决了程序员自己搭建框架时各种版本选择问题。
2.2.2 起步依赖 spring-boot-starter-web
如果要用内置的Tomcat
等服务器,需要添加spring-boot-starter-web
的起步依赖。
此外,Spring Boot
将Web 开发需要的Tomcat
Spring MVC
Jackson
都整合到spring-boot-starter-web
依赖中。
2.2.3 更多起步依赖
网友整理的Spring Boot 起步依赖
Maven仓中 Spring Boot 团队整合的更多起步依赖
起步依赖能够自由组合和拼装,需要借助自动装配的特性,后文将讲到
2.2.4 自动装配
实现自动装配的前提是,jar包被统一管理,Spring Boot
约定所有需要被系统注入到bean容器中的类的类路径都放在jar 包的META-INF/spring.factories
中。提供规范后,借助Spring Framework
的装配能力,写死规范的路径,借此完成自动装配 。
由于@SpringBootApplication
复合的 @EnableAutoConfiguration
就能完成自动装配,而spring initializr 生成的工程启动类就带了@SpringBootApplication
。
换言之,Spring Boot 的自动装配 = Spring Boot提供的规范 + Spring Framework 的手动装配代码写死在框架中,不涉及架构的开发任务上还用不上这个特性
2.3 去XML配置
引用官网的Features
的一个特点:
- Absolutely no code generation and no requirement for XML configuration
当然这里去除的的xml配置只是原来Spring Framework
大量使用的bean配置。Maven中的xml配置本质上属于打包工具的使用,与bean配置关系不大。
原来写在bean属性中的数据库配置、端口配置等都可以被yml
properties
文件取代,这些文件可以用在Spring Cloud 的规范中。
3. Spring Boot 与 Spring Cloud 的关系
3.1 先给结论
- Spring Boot
是开发框架,既可以开发单体服务,也可以开发微服务。 - Spring Cloud
是一套开发微服务的工具,这些工具让开发者更好得实现自己的微服务架构。这些工具都是由Spring Boot开发的。程序员可以直接使用这些工具,也可以基于工具二次开发,或者基于原理开发。这里抽象为基于Spring Boot 的微服务架构标准 - 关系
Spring Cloud
是 使用Spring Boot
作为开发框架,为程序员提供了一套微服务的架构标准。程序员使用Spring Cloud提供的工具自己组合成解决方案。各大公司也可以自己基于Spring Cloud
的规范开发个性化套件并自由组合为自己的Spring Cloud
如Spring Cloud Alibaba
。
Spring Cloud 官方文档
3.2 通俗化解释
-
Spring Boot
开发框架 -
Spring Cloud
一套微服务的架构工具(标准) -
Spring Cloud Alibaba
Alibaba 的微服务解决方案
一句话:阿里巴巴使用基于Spring Boot
开发框架,以Spring Cloud
微服务架构标准,二次开发并开源了一种微服务解决方案: Spring Cloud Alibaba。
4. 后记
理清了Spring
和 Spring Boot
和 Spring Cloud
的关系有利于检索问题时确定关键词。就好像要了解Spring MVC
的注解就应该看Spring Framework
的官方文档,Spring Boot
的文档往往只介绍区别于Spring Framework
的特性。同时,自己要搭建一个微服务框架,可以优先去官网查看已有的微服务解决方案。