【Spring(一)】初识Spring(史上最详细的Spring介绍!)

news2025/1/13 17:03:00

文章目录

  • 前言
  • 1.初识Spring
  • 2.Spring Framework系统架构
  • 3.核心概念

前言

在学习 Spring 之前,我们需要先知道为什么要学习它?
   IT业的任何一门技术,它只有抢占了很强的市场占有率,才会有更多的人使用和学习它,Spring技术在我们Java开发界拥有一个什么样的地位呢?可以这么说,现在Spring技术是企业级开发的一个必备技能,首选的技术。🎈🎈百分之九十以上的项目,都在应用 Spring 技术进行开发。看到这样一个占有率,我们就要想,为什么这么多人选它呢?难道就是用它的人多吗?🤔🤔当然不是,每一个技术都是用来解决问题的,Spring 技术也是这样,正因为它解决了我们开发中的问题,所以才有更多的人去选择它,更多的公司去使用它,那它给我们解决了什么问题呢?两个核心点👉👉

  • 1.简化开发,从最早出现到现在,规模变得越来越大,功能变得越来越多,开发难度变得越来越复杂,在这样一个背景前提下,Spring 能够脱颖而出,使用Spring技术可以降低企业级开发的复杂性🎉🎉。单从这一点来说,我们是不是就觉得这个技术是非用不可的呀,因为做什么事情我们想的应该是越简单越好,越高效越好🤣🤣。而Spring技术恰巧就做到了这一点,这是它的第一个比较大的优势。
  • 框架整合,现在企业级开发大部分都是使用一些现成的技术组合在一起使用,前期我们学过MyBatis框架,(只是简单了解了一下🤦‍♂️🤦‍♂️) 简化了JDBC的开发,同样的道理,以后我们会学习各种各样的框架,来解决我们对应的一个又一个的问题,这个时候新的问题就来了👉👉,这么多框架合作在一起工作的话,就会变得越来越庞杂,我们在开发的时候复杂度就会变得越来越高😫😫,而Spring它可以整合框架🎈🎈,那么那么多框架都交给Spring这门技术来管理的话,我们会发现它的开发效率会变高,同时它的运行速率也能提升😁😁,这样一个特点,才使我们的开发者👨‍💻👨‍💻越来越离不开Spring。
    知道为什么要学习Spring以后,我们需要知道学习Spring要学习哪些东西?
      看完Spring的两大特征以后,我们应该知道,它里边的技术一定是围绕这些东西展开的,因此,在Spring中,我们将学习以下内容👉👉
  • 简化开发
    • Spring提供了两大核心技术:
      • IOC(控制反转)
      • AOP(切面编程)。
      • 事务处理
          正是有了这两大核心技术的存在,我们才能进行简化开发👏👏,因此,这两大技术是我们首先需要学习的内容✍️✍️,基于 AOP的思想之上,又衍生出了一个事务处理,而Spring的事务处理是Spring技术中的一个亮点,它让我们的事务编写更高效,更简单,并且功能更强大💪💪,这就是Spring给我们提供的三块东西,来让我们简化开发👨‍💻👨‍💻。
  • 框架整合
      对于框架整合 ,Spring可谓是做到了极致,它能够整合市面上现在主流的几乎所有的框架😦😦,我们会学习已经学过的MyBatis框架整合到Spring中。

1.初识Spring

  我们在知道要学Spring的什么以后,先来了解一下Spring的大家族,Spring不光是一门技术,它还是一个家族👪👪,对于Spring大家族,我们从它的官网看起👉👉Spring官网
在这里插入图片描述
  在Spring主页中给我们提供的最重要的信息如下👇👇
在这里插入图片描述
  讲的是什么呢?讲的是Spring能干的事情,这里面有我们非常熟悉的东西,比如说 web开发,当然Spring也能做微服务的开发,除此之外,Spring还比较擅长做分布式系统的开发,光这三点就已经占据了现在JavaEE市场主流开发的九成以上了🙈🙈。 Spring并不是一个单一的技术🚨🚨, 它实际上是一个大家族👇👇
在这里插入图片描述
  在Projects里边介绍了Spring所有的技术,点开第一个概述(可能比较慢,需要耐心等待一下)👇👇
在这里插入图片描述
  进来以后我们会发现,上面每个单元就是一个独立的技术☝️☝️,那么这些技术组成了Spring的整个大家族,点开任何一个技术名称,在左边列表了它所有的技术名称,位置靠前的相对来说是重要度比较高的,也是现在在市面上使用量比较大的技术👇👇。
在这里插入图片描述
  对于Spring来说,它既是一门技术,也是一个大家族,里面包含了若干个项目,因此现在的Spring已经不单单是帮我们做一些简单的开发了🎈🎈,它已经形成了一套自己的独有的开发的生态圈,什么意思呢,也就是说你可以完全在Spring的解决方案下把你的项目给构建出来,并且设计开发完成,而里边的每个项目都有自己独立的功能,根据你的使用需要来进行选择👨‍💻👨‍💻,基于这样一个特征,我们说你开发完全可以在它的技术栈中进行选择,就像你去快餐店吃饭的时候说,我要这个我要那个,Spring现在就可以做到你用这个,你用那个,几个组合在一起来把整个项目开发出来,因此,对于开发界来说,给它一个非常好听的名称,叫做Spring全家桶🎉🎉,来一桶里边什么都有🤣🤣,能帮你做很多的事情t,这么多技术,我们不可能全部都学习, 我们要学习哪些呢?
  第一个要隆重介绍的叫做Spring Framework🎈🎈

  Framework翻译过来叫做框架,这是所有技术中的第一门技术,也就是说Spring最早出现的就是这门技术,而我们学的就是它✍️✍️。那么它在整个全家桶中的地位如何呢?其他的所有的技术都是依赖它执行的。所以它是一个底层的框架,它是一个设计型的框架,所有东西都能放在它上边运行,因此,它在整个Spring家族中有着举足轻重的地位👍👍。

  第二个我们要介绍的是Spring Boot🎈🎈

  前边我们说过,Spring可以简化开发,使用Spring Boot技术可以在简化开发的基础上加速开发🚀🚀,它是用来提高开发速度的,它会让我们原先的Spring开发变得更加简单,书写更少的东西。所以说,Spring Boot技术问世以后,快速进行了推广🛸🛸,所有的开发者都爱不释手🌈🌈。

  第三个我们要介绍的叫做Spring Cloud🎈🎈

  这是我们前边所说的分布式开发的相关技术了,这三个技术基本上就能够应对我们企业级开发所有的主流工作了。当然我们也可以再使用其他的技术,例如Spring Data,Spring Session等等一系列的技术,来丰富你开发过程中所使用到的解决方案,有关Spring家族我们先聊到这🎉🎉。

2.Spring Framework系统架构

  在我们了解完Spring之后,我们将学习Spring Framework的系统架构🎈🎈

Spring Framework 是现在Spring生态圈中最基础的项目, 也是Spring全家桶中最顶级的项目,其他的所有的项目都在它的基础上运行使用👍👍,那么这么重要的项目也不是一次就设计完成的✍️✍️,是经过了若干个版本的迭代演进👇👇。

在这里插入图片描述

  我们可以看到每一个版本都会有一些模块关系的调整,甚至加入了一些新的东西,去掉了一些小的功能🙏🙏。现在我们要学习的Spring5系列对应的架构图长什么样呢?很遗憾官方文档中没有提供全新的架构图,言外之意,Spring4系列的架构图已经趋于了稳定🎉🎉。所以我们现在学习的实际上是4系列的架构图。接下来我们具体学习Spring4系列的这张架构图✍️✍️。
在这里插入图片描述

对于Spring的系统架构图,我们从哪个模块开始说起呢?

  第一个模块叫做 Core Container:核心容器🎈🎈
在这里插入图片描述

  这个模块是Spring框架中的最核心的部分🚩🚩,其他所有的模块都是依赖它运行的,看到容器这样一个词,我们可以想到它是装东西的,装什么呢?对于Java程序来说,只有一种东西可以装,那就是对象,所以根据这样一个结构设计来看,Spring它是一个用来管对象的技术🎈🎈,这是系统架构中的第一块。

  第二块我们要说什么呢?叫做AOP(面向切面编程)🎈🎈

  在说它之前,我们先说一下,系统架构图讲究上层依赖于下层,AOP技术放在以下位置👇👇,说明它要依赖容器的执行,首先明确这一点,再来说AOP,什么是AOP,就是面向切面编程🚩🚩,于我们前期学的面向对象编程(OOP)就差了一个字母,那它是什么呢?其实和面向对象编程一样,它也是一种编程思想,换句话说,它教你程序应该怎么做,又是一个设计型的概念🙏🙏,而我们的Spring对这种设计型的概念进行了落地💪💪, 具体AOP技术是做什么的呢?它可以在不惊动你原始程序的基础上,给它增强功能🎉🎉,旁边的Aspects又是干什么的呢?它也是对AOP思想进行了实现,Spring发现Aspects的制作已经做的非常好了,于是大胆的将它收录到它的整个技术栈中,就告诉大家,Aspects 比我做得好,建议用这个东西,所以后边开发我们会发现,我们学习Spring的AOP开发的时候,除了要导Spring AOP的坐标,还要导Aspects的坐标,这是Spring的第二个核心大块🚩🚩
在这里插入图片描述

  下面我们来说第三个大块,叫做Data Access🎈🎈

  可以参考下图👇👇,Data Access什么意思,就是数据访问,前边学习的DAO叫做 Data Access Object:数据访问对象,所以这一块是在做与数据层相关的技术✍️✍️, 后边这个词Integration什么意思,叫做数据集成,怎么解释呢?Spring内部不仅提供了自主的访问数据层的技术,同时它还支持你用Spring技术和其他技术整合使用🎉🎉,而这个集成表示的是它包容其他技术。比如说MyBatis可以和Spring一起整合使用,这是我们要说的Spring第三块的东西💪💪。
在这里插入图片描述

  在整个数据访问这个大的模块中☝️☝️,有一个东西需要单独介绍,叫做Transactions:事务🎈🎈

  Spring在事务这个方面做了非常大的突破💪💪,给我们提供了开发起来效率非常高的事务控制方案,所以这一块对我们来说是非常重要的!!🚩🚩

  第四块又是什么呢?叫做Web:web开发🎈🎈

  Spring也可以进行web开发👇👇,我们会在 Spring MVC 中进一步学习✍️✍️。
在这里插入图片描述

  最后一块内容在最下边,叫做Test:单元测试与集成测试🎈🎈

  看到Test我们应该知道,这是做测试,Spring在单元测试跟集成测试方面也给我们提供了一些帮助性的操作,我们主要学习单元测试相关的内容✍️✍️。这就是整个Spring架构包含的内容👇👇
在这里插入图片描述

3.核心概念

  接下来我们进入核心概念的学习🌤️🌤️,在这之前,我们代码书写的状况是:耦合性偏高,如下图👇👇,众所周知,我们写代码一直追求的是低耦合,后来提出的解决方法是:使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象🎈🎈。这样的一种思想就叫做: IOC(控制反转)🚩🚩。
在这里插入图片描述

  什么意思呢,也就是让创建对象这件事,不要程序自己去做了,对象的创建控制权转移到外部,这种思想称为控制反转🎊🎊,这么做有什么好处吗,它想达到一个什么样的效果,其实就是为了做一件事,那就是解耦💪💪。而Spring技术对IOC思想进行了实现,Spring在内部提供了一个容器,称为IOC容器,或者称为Spring容器,用来充当IOC思想中的外部🎉🎉。IOC容器中管了大量的对象,管理对象的创建以及初始化的过程,也就是以后造对象程序不用管了,由IOC容器管自己造的对象,它管它造出来的对象不叫对象,而是叫做Bean🎈🎈

  如下图👇👇,我们在运行程序的时候还是会报错,原因在于Service的运行要依赖DAO对象运行,但是你光给我造了一个Service的对象,而我Service运行需要DAO才能运行✍️✍️。IOC一看,就说既然你Service需要依赖这个DAO运行,而巧了,这俩对象都在我容器里,干脆我也把这活给你干了🤣🤣,怎么干呢,它把你的Service和你DAO之间的依赖关系给你绑定上,也就是说你Service里边的DAO对象,Spring容器直接把这个东西给到你,你不就有了,这样你不就可以运行了👏👏,这种思想就叫做:DI(依赖注入)🚩🚩
在这里插入图片描述

   也就是在容器中,如果你两个bean之间存在着依赖关系,IOC容器直接将这俩关系给你绑定了,绑好。绑关系的整个过程叫做依赖注入🚩🚩。绑完之后的效果是:你现在再拿Service对象的时候,你想用里边的DAO,直接就有对象,这样就很舒服了🌤️🌤️,我们的程序也能运行了,也达到了我们的目标:充分解耦了😄😄。最终的效果是:使用对象时不仅可以直接从IOC容器里边获取,并且获取到的bean已经绑定了所有的依赖关系🎉🎉。这样,我们就讲完了核心概念的内容🎈🎈

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

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

相关文章

APP怎么免费接入MobPush

1、获取AppKey 申请Appkey的流程,请点击 http://bbs.mob.com/thread-8212-1-1.html?fromuid70819 2、下载SDK 下载解压后,如下图: 目录结构 (1)Sample:演示Demo。(2)SDK&#…

【C操作符】详解操作符

操作符前言一、操作符分类二、算数操作符三、移位操作符(一)原码、补码、反码(二)操作符应用1.左移操作符(1)正数(2)负数(3)总结2.右移操作符(1&a…

《码出高效:java开发手册》六-数据结构与集合(二)

前言 接上篇,第六章第二部分,上篇讲到了红黑树的FixAfterInsertion方法,这个方法原理与fixAfterDelete类似,只讲这个添加时的调整方法 代码可以看到,调整后的根节点一定是黑色的,叶子节点可红可黑&#x…

Spring 之 @Import 注解使用与源码浅析

1、Import 的作用? 再说 Import 之前先回忆下 Component 的作用,在类上标注该注解,该类就能够被 Spring 扫描封装成 BeanDefinition 并注册到容器中。但现在需要将第三方 jar 包、或者其他路径下面的包中的类也要被扫描注册呢?使…

Unity 制作一个简单的星系

使用素材: 1.Planets with Space Background in Flat Style 2.Planet Icons 创建场景 编写脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Cytaster : MonoBehaviour {[SerializeField]private float rotate_s…

【LeetCode】矩阵置零 [M](矩阵)

73. 矩阵置零 - 力扣(LeetCode) 一、题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&a…

uni-app - 封装全局 API 调用弹框组件

uni-app - 在纯 JS 文件中调用自定义弹框组件 / 封装全局 API 调用弹框组件(解决小程序、APP 无法使用 document.body.appendChild 插入组件节点)适配全端 uni-app中实现一个全局弹层组件 引用超级全局组件方案 一、安装 npm install vue-inset-loade…

零入门容器云网络-9:命令行式操作tun设备介绍

已发表的技术专栏(订阅即可观看所有专栏) 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

测开工具:spring boot 实现同步数据库表结构

源码: GitHub - 18713341733/mysqlsync 一、使用场景 一个项目,有多套开发环境。有一套标准的数据库,不同的开发环境,有各自的一套数据库。 标准数据库的表结构经常发生变化,不同的开发环境中的数据库,…

C#,图像二值化(04)——全局阈值 Kittler 算法及其源程序

1、Kittler算法(最小误差法)概述 最小误差法是 J. Kittler & J. Illingworth 1986年在《MINIMUM ERROR THRESHOLDING》文章中提出的一种基于直方图的阈值分割方法,简称 Kittler 算法。其思想:假设灰度图像由目标和背景组成,且目标和背景满足一混合高…

11个技巧让你成为更好的 Typescript 程序员

学习 Typescript 通常是一次重新发现之旅。您的最初印象可能非常具有欺骗性:这不就是一种注释 Javascript 的方式,所以编译器可以帮助我找到潜在的错误吗? 通过 r/mevlixreddit 虽然这句话通常是正确的,但随着您继续前进&#xff…

【聆思CSK6 视觉AI开发套件试用】AI识别试用以及闭坑方案

本篇文章来自极术社区与聆思科技组织的CSK6 视觉AI开发套件活动,更多开发板试用活动请关注极术社区网站。作者:X Y Z 非常感谢能有这次机会体验聆思CSK6 视觉AI开发套件。上班的一大早收到了快递,迫不及待的打开快递。必须先来个图&#xff0…

4个技巧,节约网络工程师一半的时间

01 批量ping网段 对于一个网段ip地址众多,如果单个检测实在麻烦,那么你就可以直接批量ping网段检测,那个ip地址出了问题,一目了然。 先看代码,直接在命令行窗口输入: for /L %D in (1,1,255) do ping 10…

渗透测试神器--Burp Suite

一、介绍 Burp Suite 是用于攻击web 应用程序的集成平台。Burp Suite是一款信息安全从业人员必备的集成型的渗透测试工具,它采用自动测试和半自动测试的方式,包含了Proxy、Spider、Scanner、Intruder、Repeater、Sequencer、Decoder、Comparer等工具模块…

uniapp 窗口小工具、桌面小部件、微件 Ba-AppWidget

简介(下载地址) Ba-AppWidget 是一款窗口小工具(桌面小部件、微件)插件,默认为音乐播放器的样式,有其他界面需要,可联系作者定制。 支持点击事件监听支持动态更改页面内容支持设置小工具的预览…

区块链(一): 以太坊基础知识

目录什么是区块链?什么是以太坊?什么是加密货币?以太坊与比特币有什么不同?以太坊能做什么?什么是智能合约?以太坊社区以太坊白皮书什么是区块链? 区块链是一个交易数据库,在网络中…

容器,容器技术,云容器相关入门知识

前言 最近面试了一家国企,交谈愉快,对方的工程师问到容器时,突然愣了一下。脑子里有学习前端时候学习的docker,但印象里docker可不能代表容器技术,于是学习容器相关知识后整理相关知识以作巩固。 什么是容器 有点开…

SuperMap iDesktop/iDesktopX 端性能优化

作者:yd&hyy 一、背景 在使用iDesktop/iDesktopX的三维场景加载GIS数据的过程中,随着数据的种类、大小、数量的增多,往往会有很多的性能问题,加载速率缓慢,数据显示清晰度不足,多数据交叠显示错误&am…

『分分钟玩转VueRouter●上』VueRouter的一些基础配置

文章目录前言一、vue中如何使用VueRouter?二、路由使用的基本配置1.多级路由配置2.路由中的query参数3.命名路由4.路由的params参数5.路由的props配置6.router-link的replace属性7.通配符路由前言 计算机网络中有一个路由的概念:路由是指网络数据包发送到目的地址的…

php宝塔搭建部署实战SDCMS蓝色通用宽屏企业网站源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套php开发的SDCMS蓝色通用宽屏企业网站源码,感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&…