【SpringBoot从入门到精通】01_SpringBoot概述

news2024/11/27 4:22:34

一、Spring与SpringBoot

1.1 Spring

Spring 是一款目前主流的 Java EE 轻量级开源框架,是 Java 世界最为成功的框架之一。Spring 由“Spring 之父”Rod Johnson(罗宾·约翰逊) 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。

  • 广义的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈;
  • 狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架;
  • Spring官网:https://spring.io/

Spring是如何简化Java开发的

为了降低Java开发的复杂性,Spring采用了以下4种关键策略:

  1. 基于POJO的轻量级和最小侵入性编程,所有东西都是bean;
  2. 通过IOC,依赖注入(DI)和面向接口实现松耦合;
  3. 基于切面(AOP)进行声明式编程;
  4. 通过切面和模版减少样式代码,比如:JDBCTemplate;

Spring的能力

在这里插入图片描述

  1. Microservices 微服务:通过可独立开发的微服务快速交付生产级功能。SpringBoot的特性使得在生产环境中大规模构建和运行微服务变得非常容易。而SpringCloud则在此基础上,帮助微服务应用进一步减轻管理并提高容错能力。

  2. Reactive 响应式编程:Spring 的异步,非阻塞架构意味着您可以使用少量资源(线程、CPU、内存),开发一个高吞吐量、高并发的应用。

  3. Cloud 云端技术:开发分布式微服务系统具有一定的挑战性,复杂性从应用层转移到网络层,并要求在服务之间进行更多的交互。SpringCloud包含使应用程序在云中运行所需的众多服务,帮助构建云原生。

  4. Web apps Web应用程序:这是我们最常用的一个模块,Spring提供了SpringMVC,让我们摆脱了以前使用Servlet的那种繁琐的开发方式,以更简洁和更优雅的API,来完成Web应用程序的开发。

  5. Serverless 无服务器编程:Serverless的全称是Serverless computing无服务器运算,又被称为函数即服务(Function-as-a-Service,缩写为 FaaS),是云计算的一种模型。以平台即服务(PaaS)为基础,无服务器运算提供一个微型的架构,终端客户不需要部署、配置或管理服务器服务,代码运行所需要的服务器服务皆由云端平台来提供。Spring Cloud Function提供让Spring开发人员利用无服务器或FaaS平台的功能。

  6. Event Driven 事件驱动:对业务事件做出反应,实时处理您的流数据。事件驱动系统反映了现代企业的实际工作方式,在微服务应用架构中被广泛使用。Spring帮助开发人员能够围绕事件构建应用程序, Spring有很多事件驱动项目,比如Streaming,Integration和Data Flow等。

  7. Batch 批处理:批处理具有高效处理大量数据的能力, Spring Batch的标准处理模式帮助开发者在JVM上构建健壮的批处理作业和关键任务应用程序。

Spring的生态

https://spring.io/projects/spring-boot

覆盖了:

  • web开发
  • 数据访问
  • 安全控制
  • 分布式
  • 消息服务
  • 移动开发
  • 批处理

Spring5重大升级

响应式编程

在这里插入图片描述

上图是Spring官方给出的SpringMVC和Spring WebFlux的对比图,先看最上面的描述信息:

  • 右侧是Spring MVC的描述:Spring MVC构建在Servlet API之上,使用同步阻塞I/O架构,每个线程一个请求模型。

  • 左边是Spring WebFlux的描述:Spring WebFlux是一个从头开始构建的非阻塞web框架,它利用多核、新一代处理器并处理大量并发连接。

Spring WebFlux 作为一个响应式 (reactive-stack) web 框架补充,在 5.0 的版本开始加入到 Spring 全家桶。

这是一个完全非阻塞的,支持 Reactive Streams,运行在诸如 Netty,Undertow,以及 Servlet 3.1+ 容器上的。Spring WebFlux 可以让你使用更少的线程去处理并发请求,同时能够让你使用更少的硬件资源来拓展你的应用。

Spring MVC or WebFlux?

WebFlux 并不是 Spring MVC 替代,它主要应用还是在异步非阻塞编程模型上。如果你的项目并不是该模型或者你的应用目前本身已经足够应付当前情况,是不需要去切换成 WebFlux 的。

内部源码设计

基于Java8的一些新特性,重新设计源码架构。

使用Spring Framework 5.0,基准版本是Java 8。Spring Framework代码现在已升级为使用Java 8中的新特性。会改进更可读和更有效的框架代码。

使用的一些Java 8特性如下:

  • 核心Spring接口中的Java8 static 方法;
  • 基于Java 8反射增强的内部代码改进;
  • 接口默认实现;
  • 在框架代码中使用函数式编程——lambda表达式和stream流。

1.2 SpringBoot

什么是SpringBoot

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置

简单来说就是能快速创建出生产级别的Spring应用,简化开发,约定大于配置, you can “just run”,能迅速的开发web应用,几行代码开发一个http接口。

所有的技术框架的发展似乎都遵循了一条主线规律:从一个复杂应用场景衍生一种规范框架,人们只需要进行各种配置而不需要自己去实现它,这时候强大的配置功能成了优点;发展到一定程度之后,人们根据实际生产应用情况,选取其中实用功能和设计精华,重构出一些轻量级的框架;之后为了提高开发效率,嫌弃原先的各类配置过于麻烦,于是开始提倡“约定大于配置”,进而衍生出一些一站式的解决方案。

是的,这就是Java企业级应用->JavaEE->Spring->SpringBoot的过程。

随着 Spring 不断的发展,涉及的领域越来越多,项目整合开发需要配合各种各样的文件,慢慢变得不那么易用简单,违背了最初的理念,甚至人称配置地狱。Spring Boot 正是在这样的一个背景下被抽象出来的开发框架,目的为了让大家更容易的使用 Spring 、更容易的集成各种常用的中间件、开源软件;

SpringBoot优缺点

优点
  • Create stand-alone Spring applications
    • 创建独立Spring应用
  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
    • 内嵌web服务器
  • Provide opinionated ‘starter’ dependencies to simplify your build configuration
    • 自动starter依赖,简化构建配置
  • Automatically configure Spring and 3rd party libraries whenever possible
    • 自动配置Spring以及第三方功能
  • Provide production-ready features such as metrics, health checks, and externalized configuration
    • 提供生产级别的监控、健康检查及外部化配置
  • Absolutely no code generation and no requirement for XML configuration
    • 无代码生成、无需编写XML
  • SpringBoot是整合Spring技术栈的一站式框架,SpringBoot是简化Spring技术栈的快速开发脚手架;
缺点
  • 人称版本帝,迭代快,需要时刻关注变化;
  • 封装太深,内部原理复杂,不容易精通;

总结

概念:SpringBoot是一个用于快速敏捷的搭建Spring项目的脚手架;

作用: SpringBoot是为了快速创建一个大型的Spring项目;

优点:快速搭建、开箱即用、内嵌容器、零配置、微服务基础;

核心:自动装配、场景启动器。

SpringBoot时代背景

微服务

James Lewis and Martin Fowler (2014) 提出微服务完整概念。

In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.-- James Lewis and Martin Fowler (2014)

  • 微服务是一种架构风格;
  • 一个应用拆分为一组小型服务;
  • 每个服务运行在自己的进程内,也就是可独立部署和升级;
  • 服务之间使用轻量级HTTP交互;
  • 服务围绕业务功能拆分;
  • 可以由全自动部署机制独立部署;
  • 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术;

英文文档:https://martinfowler.com/microservices/

简体中文:https://blog.cuicc.com/blog/2015/07/22/microservices/

分布式

在这里插入图片描述

分布式的困难

  • 远程调用:每个服务独立部署,一般使用http进行服务交互;
  • 服务发现:就是看哪些服务是可用的,可能存在服务故障;
  • 负载均衡:按照配置的算法合理的将请求分配给不同的服务器;
  • 服务容错:各种错误情况下的处理方式,比如非代码问题,而是因为网络问题导致访问失败;
  • 配置管理:配置中心,修改配置让服务们自己同步;
  • 服务监控:多个服务以及云平台的资源消耗和健康状况;
  • 链路追踪:在服务调用过程中,如果某个服务出错,需要找到什么原因导致的出错;
  • 日志管理:在分布式环境下,如果实现日志管理;
  • 任务调度:比如我们想要让A服务执行定时任务,是所有的A服务执行还是某些执行;执行的方式是以串行还是并行的;

分布式的解决

  • SpringBoot + SpringCloud
    • SpringBoot:快速构建Spring应用;
    • SpringCloud:协调任何事情,分布式治理方案;

在这里插入图片描述

云原生

原生应用如何上云。 Cloud Native

上云的困难

  • 服务自愈:一个服务出现错误怎么复原;
  • 弹性伸缩:根据不同的性能需求分配更多的服务器;
  • 服务隔离:服务之间不相互影响;
  • 自动化部署:服务自动化部署;
  • 灰度发布:同样的服务有多台服务器运行,先把服务部署在其中一两台上看运行效果,没有问题了再慢慢全部升级;
  • 流量治理:根据服务器性能,进行流量的限制;

上云的解决

  • Docker + Kubernetes…

如何学习SpringBoot

官网文档架构

在这里插入图片描述

查看版本新特性:https://github.com/spring-projects/spring-boot/wiki#release-notes

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1560954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ssm的平面设计课程在线学习平台系统(java项目+文档+源码)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的平面设计课程在线学习平台系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 前台功能&#xf…

MySql 常用的聚合函数总结

MySQL 中的聚合函数用于对一组数据进行计算,并返回单个值作为结果。以下是常用的 MySQL 聚合函数的总结及其功能描述: 1. COUNT() 功能:用于计算指定列或表中的行数。 语法: COUNT(*) COUNT(expression) 示例: SELECT …

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.9-3.11

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第三周:浅层神经网络(Shallow neural networks)3.9 神 经 网 络 的 梯 度 下 降 ( Gradient descent for neural networks)3.10(选修&#xff0…

MATLAB多级分组绘图及图例等细节处理 ; MATLAB画图横轴时间纵轴数值按照不同sensorCode分组画不同sensorCode的曲线

平时研究需要大量的绘图Excel有时候又臃肿且麻烦 尤其是当处理大量数据时可能会拖死Windows 示例代码及数据量展示 因为数据量是万级别的折线图也变成"柱状图"了, 不过还能看出大致趋势! 横轴是时间纵轴是传感器数值图例是传感器所在深度 % data readtable(C:\U…

“美国债务螺旋上升,每百天膨胀万亿”!华尔街:投入比特币是明智之举,美元早晚垮台?

​ 前不久,黄金和比特币价格的双双逼近历史高位,再度吸引了不少金融市场参与者的关注。虽然这两类资产大涨的背后,有着诸如比特币减半临近、地缘局势引发避险等各自的原因,但也有一些业内人士提到了美国政府债务规模激增等无法回…

如何使用 ArcGIS Pro 自动矢量化水系

对于某些要素颜色统一的地图,比如电子地图,可以通过图像识别技术将其自动矢量化,这里为大家介绍一下 ArcGIS Pro 自动矢量化水系的方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的电子地图数据&#…

【C++】list介绍

个人主页 : zxctscl 如有转载请先通知 文章目录 1. list介绍2. list的构造3. ist iterator的使用4. capacity5. element access6. modifiers7. 迭代器失效8. Operations8.1 reverse8.2 sort8.3 unique8.4 splice 1. list介绍 list是可以在常数范围内在任意位置进行插…

Linux之 线程池 | 单例模式的线程安全问题 | 其他锁

目录 一、线程池 1、线程池 2、线程池代码 3、线程池的应用场景 二、单例模式的线程安全问题 1、线程池的单例模式 2、线程安全问题 三、其他锁 一、线程池 1、线程池 线程池是一种线程使用模式。线程池里面可以维护一些线程。 为什么要有线程池? 因为在…

代码随想录算法训练营第二十五天| 216.组合总和III,17.电话号码的字母组合

题目与题解 216.组合总和III 题目链接:216.组合总和III 代码随想录题解:216.组合总和III 视频讲解:和组合问题有啥区别?回溯算法如何剪枝?| LeetCode:216.组合总和III_哔哩哔哩_bilibili 解题思路&#xf…

超云信创新品发布,引领国产化AI算力新高度

在当前数字化转型的大潮中,算力作为新质生产力的重要动力引擎,对推动经济社会发展起着关键作用。尤其在人工智能领域,随着高性能、安全可控的AI算力需求持续攀升,国产化服务器的研发与应用显得尤为迫切。 作为国内专业的算力基础…

【技巧】如何解除Excel“打开密码”?

给Excel表格设置“打开密码”,可以保护表格不被他人随意打开,那如果后续不需要保护了,不想每次打开Excel都需要输密码,要怎么去除“打开密码”呢? 今天分享3个方法,最后一个方法记得收藏起来,以…

基于springboot实现教师工作量管理系统项目【项目源码+论文说明】

基于springboot实现教师工作量管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了教师工作量管理系统的开发全过程。通过分析教师工作量管理系统管理的不足,创建了一个计算机管理教师工作…

Dragonfly S系列相机 多领域大规模制造应用的首选

Dragonfly S系列工业相机,作为一款模块化紧凑型USB3机器视觉相机,一经推出就广受从生命科学仪器到工厂自动化等行业的青睐。同时它也非常适合各种嵌入式和手持设备的高性能图像采集系统。 Dragonfly S系列相机凭借其模块化、紧凑、轻量级的设计理念&…

在哪买国外服务器便宜?

在哪买国外服务器便宜?在寻找便宜且可靠的国外服务器商家时,我们需要考虑多个因素,包括价格、性能、可靠性、技术支持和扩展性等。下面是一些备受推崇的便宜国外服务器商家。 Amazon Web Services (AWS)。作为全球最大的云服务提供商之一&am…

抖店的运营玩法你真的了解吗?没有货源也能操作的方法来了!

大家好,我是电商小布。 现在越来越多的小伙伴开始察觉到了抖店这个项目的优势,并想要加入进来开一家属于自己的小店。 但是店铺的发展远不是我们看到的那么简单,开店只是我们进入这个市场的第一步。 接下来的运营操作才是关键点。 而这个…

国货护肤更替,“韩束珀莱雅们”会成为常胜将军吗?

【潮汐商业评论/文】 July是一位资深的护肤达人,“这是敏感肌专用的修复水,这是针对熬夜黑眼圈的眼霜,这是军训专用防晒霜,这是……,”虽然粉丝很少,但July总是乐此不疲的分享自己的爱用护肤品。 最近&am…

镭速如何解决UDP传输不通的问题

我们之前有谈到过企业如果遇到UDP传输不通的情况,常见的一些解决方式,同时也介绍了一站式企业文件传输方式-镭速相关优势,如果在实际应用中,若镭速UDP传输出现不通的情况,需要按照网络通信的一般性排查方法以及针对镭速…

linux下使用iperf工具测试通过EC20模组联网后网速

1.我主要参考以下文章资料(现在是VIP文章了):iperf软件编译以及使用_iperf源码编译-CSDN博客 这里我下载的版本为3.1.3,以下附上百度网盘: 链接:https://pan.baidu.com/s/1tPi4oTBUC36jJcM5M5oj_A 提取码:bo4f --来自百度网盘超级会员V6的…

echart 仪表盘实现指针的渐变色及添加图片

需求: 在仪表盘中设置指针为渐变色,并在仪表盘中间添加图片。 实现重点: 1、仪表盘指针渐变色的实现 渐变色通过设置pointer的itemStyle属性内的color实现,重点是echart版本,这个原本使用4.8.0的版本不起作用&#xff…

2022 Tesla AI Day -特斯拉自动驾驶FSD的进展和算法软件技术之数据以及虚拟

2022 Tesla AI Day -特斯拉自动驾驶FSD的进展和算法软件技术之数据以及虚拟 附赠自动驾驶学习资料和量产经验:链接 人工智能算法犹如电影的主演,我们很多时候看电影只看到主演们的精彩,但其实电影的创意和呈现都来自于背后的导演和制片等团队…