1-SpringBoot架构设计与实现原理-SpringBoot设计与特性

专栏目录

1-SpringBoot架构设计与实现原理-SpringBoot设计与特性
2-SpringBoot架构设计与实现原理-SpringBoot注解原理
3-SpringBoot架构设计与实现原理-自动装配底层原理和手写自动装配
4-SpringBoot架构设计与实现原理-SpringBoot自定义starter
5-SpringBoot架构设计与实现原理-SpringBootApplication运行原理剖析

springboot因何而来

单体架构

在这里插入图片描述

单体架构的优点:

  • 快速开发和验证想法,证明产品思路是否可行

  • 投入资源和成本,包括人力和物力相对比较节约

单体架构的缺点:

随着业务的复杂度增加,单体的灵活度会逐渐下降,比如:

  • IDE过载:随着代码量增加,代码整体编译效率下降。

  • 规模化:无法满足团队规模化高效开发。

  • 系统开发、测试、部署的冲突和效率低下等问题

  • 只能关注一套技术栈

  • 应用扩展性比较差

  • 海量用户高并发访问数量有限

单体适用场景:

架构设计的三大原则告诉我们,架构需要的是简单、适度、演化。

微服务架构图

在这里插入图片描述

微服务架构图谱谷歌或Bing下,可以看到各种各样的架构图,源于业务和架构师自身的喜好或者粗细粒度,但是每个架构图的基本组件和架构分层都差别不大,只是有的细一些,有的粗一下。比如有客户端层,容器层(K8S),API Gateway,微服务集群层,EventBus层是必须要有的,至于服务监控和服务跟踪、服务治理本身就是一个完整的系统,粒度就没有细了。基于这些概念,我把架构图稍微细化一下,这里省去服务监控跟踪和治理的部分,后续单独抽离出来分析。

网关

服务注册 服务发现 认证授权 熔断 限流 SSO 。。。

微服务集群

认证服务 OAuth2.0 用户服务 订单服务 消息服务等

微服务组件

MQ Redis 系统监控

以上架构图主要分4层,每个层次遵循架构分层的核心思想:关注点分离,职责各异,边界清晰。

每个服务需要快速构建 那么就出现了微框架

微框架 到脚手架

SB快速构建微服务的应用

springboot和spring的关系

jar包之间的IOC增强

DI :依赖注入

DL:依赖查找 即:getbean

服务于框架的框架

SpringBoot框架体系结构分析

简介

SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

源码地址:https://github.com/spring-projects/spring-boot

官网参考文档:https://docs.spring.io/spring-boot/docs/current/reference/html/

约定配置属性列表:https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties

自动装配列表:https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-auto-configuration-classes.html#auto-configuration-classes

源码项目结构

spring-boot-project 项目

spring-boot 模块

spring-boot 模块,Spring Boot 的核心实现,大概在 4W 代码左右。提供了如下功能:

  • org.springframework.boot.SpringApplication 类,提供了大量的静态方法,可以很容易运行一个独立的 Spring 应用程序。

    是不是超级熟悉。

  • 带有可选容器的嵌入式 Web 应用程序(Tomcat、Jetty、Undertow) 的支持。

    org.springframework.boot.web 包下实现。

  • 边界的外部配置支持。

spring-boot-autoconfigure 模块

spring-boot-actuator-autoconfigure 模块,大概 4W代码左右。spring-boot-autoconfigure 可以根据类路径的内容,自动配置大部分常用应用程序。通过使用 org.springframework.boot.autoconfigure.@EnableAutoConfiguration 注解,会触发 Spring 上下文的自动配置。

这里的大部分,指的是常用的框架。例如说,Spring MVC、Quartz 等等。也就是说,如果 spring-boot-actuator-autoconfigure 模块,暂未提供的框架,需要我们自己去实现对应框架的自动装配。

这个模块的代码,必须要看,没得商量。

所以到此处为止,我们已经看到对我们来研究 Spring Boot 最最最中航要的两个模块:spring-bootspring-boot-autoconfigure ,一共是 9W 行代码左右。

spring-boot-actuator 模块

spring-boot-actuator 模块,大概 2W 行代码左右。正如其模块的英文 actuator ,它完全是一个用于暴露应用自身信息的模块:

  • 提供了一个监控和管理生产环境的模块,可以使用 http、jmx、ssh、telnet 等管理和监控应用。
  • 审计(Auditing)、 健康(health)、数据采集(metrics gathering)会自动加入到应用里面。

一般情况下,我们可以不看这块代码的代码。

spring-boot-actuator-autoconfigure 模块

spring-boot-actuator-autoconfigure 模块,大概 1W7 行代码左右。它提供了 spring-boot-actuator 的自动配置功能。

一般情况下,我们可以不看这块代码的代码。

spring-boot-starters 模块

spring-boot-starters 模块,它不存在任何的代码,而是提供我们常用框架的 Starter 模块。例如:

  • spring-boot-starter-web 模块,提供了对 Spring MVC 的 Starter 模块。
  • spring-boot-starter-data-jpa 模块,提供了对 Spring Data JPA 的 Starter 模块。

而每个 Starter 模块,里面只存在一个 pom 文件,这是为什么呢?简单来说,Spring Boot 可以根据项目中是否存在指定类,并且是否未生成对应的 Bean 对象,那么就自动创建 Bean 对象。因为有这样的机制,我们只需要使用 pom 文件,配置需要引入的框架,就可以实现该框架的使用所需要的类的自动装配。

spring-boot-cli 模块

spring-boot-cli 模块,大概 1W 行代码左右。它提供了 Spring 项目相关的命令行功能。它是 Spring Boot 的命令行界面。

  • 它可以用来快速启动 Spring 。
  • 它可以运行 Groovy 脚本,开发人员不需要编写很多样板代码,只需要关注业务逻辑。
  • Spring Boot CLI 是创建基于Spring的应用程序的最快方法。

spring-boot-test 模块

spring-boot-test 模块,大概 1W 行代码左右。Spring Boot 提供测试方面的支持,例如说:

  • SpringBootTestRandomPortEnvironmentPostProcessor 类,提供随机端口。
  • org.springframework.boot.test.mock.mockito 包,提供 Mockito 的增强。

spring-boot-test-autoconfigure 模块

spring-boot-test-autoconfigure 模块,大概 1W 行代码不到。它提供了 spring-boot-test 的自动配置功能。

spring-boot-devtools 模块

spring-boot-devtools 模块,大概 8000 行代码左右。通过它,来使 Spring Boot 应用支持热部署,提高开发者的开发效率,无需手动重启 Spring Boot 应用。

spring-boot-tools 模块

spring-boot-tools 模块,大概 3W 行代码左右。它是 Spring Boot 提供的工具箱,所以在其内有多个子 Maven 项目。

注意哟,我们这里说的工具箱,并不是我们在 Java 里的工具类。困惑?我们来举个例子:spring-boot-maven-plugin 模块:提供 Maven 打包 Spring Boot 项目的插件。

关于 spring-boot-tools 模块的其它子模块,我们就暂时不多做介绍落。

3.11 其它

spring-boot-project 项目的其它子模块如下:

  • spring-boot-properties-migrator 模块:500 行代码左右,帮助开发者从 Spring Boot 1 迁移到 Spring Boot 2 。
  • spring-boot-dependencies 模块:无代码,只有所有依赖和插件的版本号信息。
  • spring-boot-parent 模块:无代码,该模块是其他项目的 parent,该模块的父模块是 spring-boot-dependencies
  • spring-boot-docs 模块:1000 行代码左右,貌似是提供 Spring Boot 文档里的一些示例。不太确定,也并不重要。

特性

SpringBoot所具备的特征有:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。

重要策略

开箱即用和约定优于配置。

开箱即用,Outofbox,是指在开发过程中,通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期。这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑。

约定优于配置,Convention over configuration,是一种由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化。

专栏目录

1-SpringBoot架构设计与实现原理-SpringBoot设计与特性
2-SpringBoot架构设计与实现原理-SpringBoot注解原理
3-SpringBoot架构设计与实现原理-自动装配底层原理和手写自动装配
4-SpringBoot架构设计与实现原理-SpringBoot自定义starter
5-SpringBoot架构设计与实现原理-SpringBootApplication运行原理剖析

所有文章都是以专栏系列编写,建议系统性学习,更容易成为架构师!
博主每天早晚坚持写博客给与读者价值提升,为了让更多人受益,请多多关照,如果觉得文章质量有帮助到你,请关注我的博客,收藏此文,持续提升,奥利给!
另外我不打算靠运营方式拿到博客专家的认证,纯纯的科技与狠活来征服读者,就看读者的感恩之心了,祝你好运连连。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xianghan收藏册

极简精品作,一分也是一份鼓励哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值