Spring 基础概念和核心思想

news2024/11/28 2:48:19

目录

一、Spring 是什么?

1、认识 loC

2、理解 Spring loC

3、DI 概念说明



一、Spring 是什么?

我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃而庞大的社区,这就是它之所以能长久不衰的原因。Spring 支持广泛的应用场景,它可以让 Java 企业级的应用程序开发起来更简单。

用一句话概括:Spring 是包含了众多工具方法的 IoC 容器


1、认识 loC

什么是 IoC ?

IoC = Inversion of Control 中文是 “控制反转” 的意思,也就是说,Spring 是一个 “控制反转” 的容器,那么怎么理解这句话呢?

我们先来看几个例子:

如果想要写一辆 车 的程序,那么大致的过程是这样的:

传统开发中是存在一个耦合性的问题的:

在传统开发中,当我们改变其中一个参数的时候,调用链中参数也会受到影响也要相应的进行改变,这就会导致假设一个调用链非常的长,当其底层发生了改变的时候,其它的参数也要进行改变,就会非常麻烦

因此,我们需要对代码进行解耦合

改进后的代码是一个低耦合的代码,当 Tire 修改之后,整个调用链不需要再进行任何的修改

两个代码中,对象创建的顺序也发生了变化:

现在,A 类 引用 B 类,B 类 引用 C 类,C 类 引用 D 类

之前的做法是在  A 类 引用 B 类的时候直接 new ,此时就会有一个问题:当它的构造方法发生变化的时候,整个调用链都要进行变化

有一天 ,我们不再去 new 它了,而是把当前的对象传入进来,此时虽然整个调用链仍然是 A 调用 B ,B 调用 C,C 调 D ,但是当 D 发生改变的时候,整个调用链是不需要进行任何的代码的修改的,从而就解决了代码的耦合性,这就是依赖注入,也就是 loC


2、理解 Spring loC

在一开始,我们就讲:Spring 是包含了多个工具方法的 IoC 容器,这就是对Spring 最核心的总结。

既然 Spring 是一个 loC (控制反转)容器,那么它具备的最基础的两个功能就是:

1、将对象存入到容器中

2、从容器中取出对象

也就是说,Spring 最核心的功能,就是将对象存入到 Spring ,再从 Spring 中获取对象的过程

将对象存储到容器中的好处:

将对象存储在  loC 容器相当于将以后可能会用到的工具都制作好,放到仓库中,需要的时候直接取就行,用完再放回仓库,而之前所说的传统的代码中 new 对象的过程,则可以理解为需要用到工具的时候,现做一个,并且用完之后不会进行保存,直接丢弃

Spring 是一个 loC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了,而 Spring 本身又具备了存储对象和获取对象的能力


3、DI 概念说明

DI : Dependency Injection,依赖注入

DI 也就是所谓的 “依赖注入”,所谓依赖注入,就是由 loC 容器在运行期间,动态的将某种依赖关系注入到对象中

DI:在程序运行期间,动态的将某个对象引入到当前类的(行为)机制,就叫做依赖注入

从广义上来说,IoC = DI,只不过是从不同的维度来描述同一个问题

但是从狭义上来说,二者又是不一样的,IoC 是一个设计思想,而 DI 是具体的实现技术

DI 是 IoC 实现的一种具体方法,比如我今天累了一天,想吃些什么,这样的思想就是IoC,但是我具体实现的方法,例如吃海底捞等等,就是 DI

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

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

相关文章

Java集合(Collection、Iterator、Map、Collections)概述——Java第十三讲

前言 本讲我们将继续来讲解Java的其他重要知识点——Java集合。Java集合框架是Java编程语言中一个重要的部分,它提供了一套预定义的类和接口,供程序员使用数据结构来存储和操作一组对象。Java集合框架主要包括两种类型:一种是集合(Collection),存储一个元素列表,…

Linux系统中驱动框架基本概述

大家好,今天跟大家简单聊聊Linux驱动框架以及概述。 一、驱动程序三种基本类型 字符设备(Char Device) 块设备(Block Device) 网络设备(Net Device) 二、设备驱动程序功能 对设备初始化和释放 把数据从内核传送到硬件和从硬件读取数据 读取应用程序传送给设备…

软件设计模式(四):观察者、组合、享元模式

前言 在这篇文章中,荔枝将会梳理软件设计模式中有关观察者模式、组合模式和享元模式的内容。其中组合模式和享元模式比较简单,重点需要理解观察者模式的机制以及为什么该模式实现了对象之间的松耦合。希望荔枝的梳理能对需要的小伙伴有帮助~~~ 文章目录 …

光伏并网双向计量表ADL400

安科瑞 华楠 ADL400 导轨式多功能电能表,是主要针对电力系统,工矿企业,公用设施的电能统计、 管理需求而设计的一款智能仪表,产品具有精度高、体积小、安装方便等优点。集成常见电 力参数测量及电能计量及考核管理,…

python回调函数之获取jenkins构建结果

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 需求背景: 现在用jenkins构建自动化测试(2个job),公司现将自动化纳入到发布系统 要求每次构建成功之后&am…

Neo4j图数据库实践——基于知识图谱方法开发构建猪类养殖疾病问答查询系统

Neo4j是一个开源的、高性能的图形数据库。它被设计用于存储、检索和处理具有复杂关系的大规模数据。与传统的关系型数据库不同,Neo4j使用图形结构来表示数据,其中节点表示实体,边表示实体之间的关系。这使得Neo4j在处理关系密集型数据时非常强…

【C++基础】5. 常量

文章目录 【 1. 常量的分类 】1.1 整型常量1.2 浮点常量1.3 字符常量1.4 字符串常量1.5 布尔常量 【 2. 常量的定义 】2.1 #define 预处理器2.2 const 关键字 常量 是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数…

【Flutter】Flutter 使用 flutter_dotenv 管理环境变量

【Flutter】Flutter 使用 flutter_dotenv 管理环境变量 文章目录 一、前言二、flutter_dotenv包简介三、安装和基本使用1. 安装flutter_dotenv2. 导入flutter_dotenv3. 使用flutter_dotenv 四、高级使用方法1. 变量引用2. 合并3. 在测试中使用 五、完整示例六、总结 一、前言 …

Codeforces-Round-895-Div-3

A. Two Vessels 题目翻译 你有两个装有水的容器。第一个容器含有 a a a克水,第二个容器含有 b b b克水。这两艘船都非常大,可以容纳任意数量的水。 您还有一个空杯子,最多可容纳 c c c克水。 一次,您可以从任何容器中舀出多 c…

UNet pytorch 胎教级介绍 使用DRIVE眼底血管分割数据集进行入门实战

同门的学妹做语义分割,于是打算稍微研究一下,最后的成果就是这篇文章,包括使用数据集进行测试,以及每一个部分的代码,还有一些思考改动和经验。 充分吸收本文知识你需要有pytorch的基础 U-net U-Net:深度…

您的密码是如何落入坏人之手的?

对于我们大多数人来说,密码只是无数在线服务最常用的身份验证方法。但对于网络犯罪分子而言,它的意义远不止于此——进入他人生活的捷径、至关重要的作案工具以及可以出售的商品。 对于我们大多数人来说,密码只是无数在线服务最常用的身份验证…

【MySql】数据库的聚合查询

写在最前面的话 哈喽,宝子们,今天给大家带来的是MySql数据库的聚合查询。在前面CRUD章节我们学习了表达式查询,表达式查询是针对列和列之间进行运算的,那么如果想在行和行之间进行运算,那么就需要用到聚合查询。聚合查…

计组+系统01:思维导图10分钟复习 I/O系统与中断

🪙前言 考研笔记整理,纯复习向,思维导图基本就是全部内容了,不会涉及较深的知识点~~🥝🥝 第1版:查资料、画思维导图~🧩🧩 编辑: 梅头脑 BING AI 参考用书…

Deep Java Library(六)DJLServing自定义模型,自定义Translator注意事项

DJLServing自定义模型中自定义Translator注意事项需要仔细读一下DJLServing源码中的ServingTranslatorFactory类,,一开始不了解以为DJLServing选择Translator像玄学,后来看了像迷宫一样ServingTranslatorFactory类大致明白了,以下…

SAP-写了一个FUNCTION,用于读取订单中,指定工序的状态。

需求 在开发一个涉及工序的Report的过程中发现,SAP仅提供了Function去获取订单的状态,没有提供获取订单工序状态的Function。考虑到后续开发的过程中,还需要复用到这个功能,于是打算按这个需求去开发一个Function,传入AFVC表的主键,返回的是把该工序的全部已激活的状态,…

八 动手学深度学习v2 ——卷积神经网络之卷积+填充步幅+池化+LeNet

目录 1. 图像卷积总结2. 填充和步幅 padding和stride3. 多输入多输出通道4. 池化层5. LeNet 1. 图像卷积总结 二维卷积层的核心计算是二维互相关运算。最简单的形式是,对二维输入数据和卷积核执行互相关操作,然后添加一个偏置。核矩阵和偏移是可学习的参…

储能直流侧计量表DJSF1352

安科瑞 华楠 具有CE/UL/CPA/TUV认证 DJSF1352-RN导轨式直流电能表带有双路直流输入,主要针对电信基站、直流充电桩、太阳能光伏等应用场合而设计,该系列仪表可测量直流系统中的电压、电流、功率以及正反向电能等。在实际使用现场,即可计量总…

概念解析 | U-Net:医学图像分割的强大工具

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:U-Net。 U-Net:医学图像分割的强大工具 U-Net Architecture Explained - GeeksforGeeks 在医学图像分析的领域,一种称为U-Net的深度学习模型已经成为了一个标准工具。U-Net…

牛客练习赛115 A Mountain sequence

题目: 样例: 输入 3 5 1 2 3 4 5 3 3 3 3 3 1 2 1 输出 16 1 3 思路: 依据题意,再看数据范围,可以知道暴力肯定是不可能了,然后通过题目意思,我们可以排列模拟一下,这里排列所得结…

Decord库快速抽帧

Decord比Opencv块6倍!! 1. 使用教程 读取视频 # 1、读取使用 from decord import VideoReader from decord import cpu, gpuvr VideoReader(tiny-Kinetics-400\\abseiling\\_4YTwq0-73Y_000044_000054.mp4, ctxcpu(0))print(video frames:, len(vr)…