【九】spring、springmvc、springboot、springcloud

news2024/11/19 22:39:37

spring、springmvc 、springboot 、springcloud

简介

        从事IT这么些年,经历了行业技术的更迭,各行各业都会有事务更新,IT行业技术更迭速度快的特点尤为突出,或许这也是从事这个行业的压力所在,但另一方面反应了这个行业人才济济。不记得什么时候听说了程序员改变世界这一口号,从而让我一直坚定的在这个行业里深耕。

        刚工作的时候还是jsp+servlet技术栈,后来经历了jsp + Struts、jsp + spring mvc 之后演进到springboot,查资料显示SpringBoot由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架,到现在我们已经演进到springcloud了。我很喜欢“演进”这个词,演进意为演变发展,很好的能够体现出技术更迭的特性,技术栈的演进和技术架构的演进实则是相辅相成的,在技术栈 演进的过程中,技术架构也从最先的单体架构、分布式架构演进到了现在的微服务架构了。

        古今多少事,都付笑谈中。演进的过程我们发现spring一路都在紧跟着更迭的脚步没有折戟沉沙,这里我将讲解一下spring更迭的路线。

一、spring

        首先我们看一下下面这张图:

        spring的核心设计理念是提倡POJO编程,我们经常听说spring的核心功能是ioc和aop,由上图我们可以清楚的看到spring最核心的是ioc的设计

spring分主要有这几个模块:

Test、核心容器(Core Container)、AOP、数据访问/集成(Data Access/ Integration)、Web

二、springmvc

        springmvc是spring框架中web模块的设计,主要是实现了javaee开发的mvc架构,javaee开发行业定义了servlet规范,springmvc实际上是servlet的一种实现,如下图类继承关系如下:

       

简单介绍了一下springmvc的设计原理,如下我们需要掌握springmvc的内部设计原理:        

三、spirngboot

        springboot的核心设计思想是“约定优于配置”,这个我在另外一篇博客里有详细的介绍springboot的原理。实际上可以这么去理解,springboot还是秉承了spirng的设计目标和愿景:简化j2ee的开发。

        一方面随着公司spring框架的深度使用,项目中配置项越来越多,对项目配置的管理越来越困难,另一方面随着IT行业的发展,微服务架构的兴起。于是spring团队设计出了springboot框架,springboot核心还是基于spirng实现的,在spring原有基础上设计出了自动装配、内置tomcat、打成jar包运行等的特性。开始使用springboot你就会发现,比之前直接spring便利了太多。

四、springcloud

        上面介绍说springboot是为了微服务架构趋势而设计的,但这只是spring顺应微服务架构潮流的开启,spring团队推出springcloud才是让人惊讶的,如下图是springcloud推出了微服务解决方案,各个微服务组件形成了一整套的解决方案,这就是spring演进的力量!

        下图是各组件搭配使用是微服务架构设计,下面这个架构在中小型项目中还是比较通用的,如果有大型项目,我们的技术栈需要作进一步调整

总结

        本篇意在讲解spring框架演进的脉络,有演进过程我们感受到spring最初的设计目标和理念一直没有改变,这也是为什么很多框架在行业发展的历程中折戟沉沙了spring却依然活跃,而且我们也能够很明显的体会到工作中我们是面向spring编程的。这里没有细致的去讲解细节内容只是梳理了一下整体脉络,其他博客会补充细节方面的内容。

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

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

相关文章

利用jdbc对数据库进行增删改查

步骤/过程: 1,导入驱动包 2,加载驱动包 3,输入信息,进行数据库连接 4,创建 statement对象 5,执行sql语句 6,如果是查询操作,利用ResultSet处理数据&#xf…

【动手学深度学习】(十一)池化层+LeNet

文章目录 一、池化层1.理论知识2.代码 二、LeNet1.理论知识2.代码实现 【相关总结】nn.MaxPool2d() 卷积层对位置比较敏感 一、池化层 1.理论知识 二维最大池化 填充、步幅和多个通道 池化层与卷积层类似,都具有填充和步幅没有可学习的参数在每个输入通道应用池…

【出现模块node_modules里面包找不到】

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 一、出现的问题二、解决办法三、其它可供参考 一、出现的问题 在本地运行 npm run docs:dev之后,出现 Error [ERR_MODULE_NOT_FOUND]: Cannot find package Z:\Blog\docs\node_modules\htmlparser2\ imported from Z:\Blo…

CCF计算机软件能力认证202309-1坐标变换(其一)(C语言)

ccf-csp计算机软件能力认证202309-1坐标变换(其一)(C语言版) 题目内容: 问题描述 输入格式 输出格式 样例输入 3 2 10 10 0 0 10 -20 1 -1 0 0样例输出 21 -11 20 -10样例解释 评测用例规模与约定 解题思路 1.第一步分析问题&…

Redux Toolkit(RTK)在React tsx中的使用

一个需求: header组建中有一个搜索框,然后这个搜索框在其他页面路由上都可以使用:例如这两个图共用顶部的搜索框; 我之前的做法就是组建传值, 在他们header 组建和 PageA ,B 的父级组件上定一个值,然后顶部变化传到父级组件,在从父级组件传到page组件,有点繁琐,现在说一下利用…

Javaweb之 依赖管理的详细解析

04. 依赖管理 4.1 依赖配置 依赖:指当前项目运行所需要的jar包。一个项目中可以引入多个依赖: 例如:在当前工程中,我们需要用到logback来记录日志,此时就可以在maven工程的pom.xml文件中,引入logback的依…

16.Java程序设计-基于SSM框架的android餐厅在线点单系统App设计与实现

摘要: 本研究旨在设计并实现一款基于SSM框架的Android餐厅在线点单系统,致力于提升餐厅点餐流程的效率和用户体验。通过整合Android移动应用和SSM框架的优势,该系统涵盖了用户管理、菜单浏览与点单、订单管理、支付与结算等多个功能模块&…

解决 Cannot read properties of undefined (reading ‘getUserMedia‘) 报错

[TOC](解决 Cannot read properties of undefined (reading ‘getUserMedia’) 报错) 0. 背景 使用浏览器输入语音时,浏览器的控制台里面有下面错误信息。 Cannot read properties of undefined (reading getUserMedia)1. 解决方法 在浏览器中访问 chrome://fla…

AVFormatContext编解码层:理论与实战

文章目录 前言一、FFmpeg 解码流程二、FFmpeg 转码流程三、编解码 API 详解1、解码 API 使用详解2、编码 API 使用详解 四、编码案例实战1、示例源码2、运行结果 五、解码案例实战1、示例源码2、运行结果 前言 AVFormatContext 是一个贯穿始终的数据结构,很多函数都…

Java集合框架定义以及整体结构

目录 一、Java集合框架1.1 什么是java集合框架1.2 集合与数组 二、集合框架具体内容2.1 整体框架2.2 遗留类和遗留接口1.3 集合框架设计特点 参考资料 一、Java集合框架 1.1 什么是java集合框架 Java集合框架(Java Collections Framework)是Java平台提…

二叉树的遍历之迭代遍历

前言:在学习二叉树的时候我们基本上已经了解过二叉树的三种遍历,对于这三种遍历,我们采用递归的思路,很简单的就能实现,那么如何用迭代的方法去解决问题? 我们首先来看第一个: 前序遍历 144.…

代码随想录二刷 |二叉树 |二叉树的层平均值

代码随想录二刷 |二叉树 |二叉树的层平均值 题目描述解题思路代码实现 题目描述 637.二叉树的层平均值 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1: 输…

Avaya Aura Device Services 任意文件上传漏洞复现

0x01 产品简介 Avaya Aura Device Services是美国Avaya公司的一个应用软件。提供一个管理 Avaya 端点功能。 0x02 漏洞概述 Avaya Aura Device Services 系统PhoneBackup接口处存在任意文件上传漏洞,攻击者可绕过验证上传任意文件获取服务器权限。 0x03 影响范围…

结构体和位段

结构体: C语言中,我们之前使用的都是C语言中内置的类型,比如整形(int)、字符型(char)、单精度浮点型(float)等。但是我们知道,我们现实世界中,还…

用Rust刷LeetCode之27 移除元素

27. 移除元素 难度: 简单 原描述: 新描述: func removeElement(nums []int, val int) int { for i : 0; i < len(nums); i { if nums[i] val { nums append(nums[:i], nums[i1:]...) i-- } } return len(nums)} Rust 版本 下面这种写法编译无法通过: pub fn remove_…

b样条原理与测试

为了保留贝塞尔曲线的优点&#xff0c;同时克服贝塞尔曲线的缺点&#xff0c;b样条在贝塞尔曲线上发展而来&#xff0c;首先来看贝塞尔曲线的定义&#xff1a; 对于贝塞尔中的基函数而言&#xff0c;是确定的&#xff0c;全局唯一的&#xff0c;这导致了如果控制点发生变换将会…

Linux基本指令(超详版)

Linux基本指令&#xff08;超详版&#xff09; 1. ls指令2.pwd指令3. cd 指令4.touch指令5mkdir指令6.rmdir指令&&rm指令7.man指令7.cp指令8.mv指令9.echo指令10.cat指令11.more指令12.less指令13.head指令14.tail指令15.date指令16.find指令17.grep指令zip(打包压缩) …

使用cmake构建Qt6.6的qt quick项目,添加应用程序图标的方法

最近&#xff0c;在学习qt的过程中&#xff0c;遇到了一个难题&#xff0c;不知道如何给应用程序添加图标&#xff0c;按照网上的方法也没有成功&#xff0c;后来终于自己摸索出了一个方法。 1、准备一张图片作为图标&#xff0c;保存到工程目录下面&#xff0c;如logo.ico。 …

二维码智慧门牌管理系统:引领未来的城市管理

文章目录 前言一、主要特点二、升级带来的优势与意义 前言 随着科技的快速发展&#xff0c;智能化管理已经成为我们生活和工作的重要方面。门牌管理系统是城市管理的基础设施之一&#xff0c;其智能化程度直接影响着城市管理的效率和质量。为了适应这一需求&#xff0c;二维码…

Helio 升级为 LISTA DAO,开启多链时代新篇章并宣布积分空投计划

Helio Protocol 是 BNB Chain 上排名第一的去中心化稳定币协议&#xff0c;其推出的超额抵押和清算机制支持的去中心化稳定币 HAY&#xff0c;在 BNB Chain 有非常广泛的应用&#xff0c;包括流动性挖掘、质押、交易、储值等&#xff01; 2023 年 7 月&#xff0c;Helio Protoc…