【微服务】Spring 和Spring Boot 和 Spring Cloud 的关系及微服务架构

1. 前言

  1. Spring 官方文档
  2. 本文的 Spring 指的是 Spring Framework 5 ,简单介绍其组成,后文将不再展开。
    Spring Framework 5 整合了许多功能,其中开发用得最多
    Spring Core 提供了的 IOC容器
    Spring MVC 运用MVC编程模式,在IOC容器 的基础上为了支持Web开发,提供了 许多注解和Api。
  3. 需要充分了解了maven或gradle 才可以更好得了解Spring Boot (可运行jar包和依赖外部tomcat环境的不同)
  4. 文章按照解决以下疑问的方式进行展开。
    为什么有了Spring Framework 5 还需要Spring Boot ?(Spring Boot 的特性)
    什么是微服务?Spring BootSpring Cloud 和微服务的关系 ?

2. Spring Boot 的特性

这里的特性指的是,区别于Spring Framework 5 的特性。

2.1 直观表现:内置服务器

比较老的项目SSMSSH 项目都需要Tomcat 等服务器软件为Java Web 程序的的容器。
但是Tomcat是什么什么写的?——Java。既然Spring FrameworkTomcat 同根同源,又是实际上开发的标准套件,于是Spring Boot就将两者整合到一起。有了内置的Tomcat java代码及Api,通过MavenGradle 打包工具,把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团队考量了兼容性和实用性后提供的标准化启动库。解决了程序员自己搭建框架时各种版本选择问题。
【微服务】Spring 和Spring Boot 和 Spring Cloud 的关系及微服务架构_第1张图片

2.2.2 起步依赖 spring-boot-starter-web

如果要用内置的Tomcat等服务器,需要添加spring-boot-starter-web 的起步依赖。
此外,Spring Boot 将Web 开发需要的Tomcat Spring MVC Jackson 都整合到spring-boot-starter-web 依赖中。

【微服务】Spring 和Spring Boot 和 Spring Cloud 的关系及微服务架构_第2张图片

2.2.3 更多起步依赖

网友整理的Spring Boot 起步依赖
Maven仓中 Spring Boot 团队整合的更多起步依赖
起步依赖能够自由组合和拼装,需要借助自动装配的特性,后文将讲到
【微服务】Spring 和Spring Boot 和 Spring Cloud 的关系及微服务架构_第3张图片

2.2.4 自动装配

实现自动装配的前提是,jar包被统一管理,Spring Boot 约定所有需要被系统注入到bean容器中的类的类路径都放在jar 包的META-INF/spring.factories 中。提供规范后,借助Spring Framework 的装配能力,写死规范的路径,借此完成自动装配 。
由于@SpringBootApplication 复合的 @EnableAutoConfiguration 就能完成自动装配,而spring initializr 生成的工程启动类就带了@SpringBootApplication
【微服务】Spring 和Spring Boot 和 Spring Cloud 的关系及微服务架构_第4张图片

换言之,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 CloudSpring Cloud Alibaba
    Spring Cloud 官方文档
    【微服务】Spring 和Spring Boot 和 Spring Cloud 的关系及微服务架构_第5张图片

3.2 通俗化解释

  • Spring Boot
    开发框架

  • Spring Cloud
    一套微服务的架构工具(标准)

  • Spring Cloud Alibaba
    Alibaba 的微服务解决方案

一句话:阿里巴巴使用基于Spring Boot开发框架,以Spring Cloud微服务架构标准,二次开发并开源了一种微服务解决方案: Spring Cloud Alibaba。
【微服务】Spring 和Spring Boot 和 Spring Cloud 的关系及微服务架构_第6张图片

4. 后记

理清了SpringSpring BootSpring Cloud 的关系有利于检索问题时确定关键词。就好像要了解Spring MVC的注解就应该看Spring Framework的官方文档,Spring Boot的文档往往只介绍区别于Spring Framework的特性。同时,自己要搭建一个微服务框架,可以优先去官网查看已有的微服务解决方案。

你可能感兴趣的:(spring,微服务,架构)