认识Spring 和 IoC

news2024/9/28 9:22:15

目录

何为Spring

1. 何为容器 

2. 何为 IoC

2.1 传统的程序开发:耦合性太高 

2.2 解决传统开发中的缺陷 

2.3 对比总结:IoC的实现思想 

3. 理解Spring IoC

4. 理解 DI

5. 总结


何为Spring

Spring是一个包含了众多工具方法的 IoC 容器

1. 何为容器 

此处的容器,就类似于我们生活中所说的容器,可以用来存储东西。例如:List便是一个存储数据的容器,Tomcat是一个 Web容器;同样的,Spring也是一个容器。

2. 何为 IoC

IoC -> Inversion of Control,也就是控制反转的意思,因此 Spring 是一个 "控制反转" 的容器。 

下文再对 IoC 进行解析: 

2.1 传统的程序开发:耦合性太高 

在学习 Spring 之前,我们常用的创建对象的方法就是去 new一个对象。但是这种传统的方法存在一个缺陷,就是类与类之间的耦合性太高了。例如此处举个例子,"一个人读书,得先读初中,再读高中,最后才读大学,因此,如果要创建一个大学对象,就得先创建一个高中对象,创建一个高中对象,就得先创建一个初中对象"

而这个程序是写死的,它的思维模式是固定的,如果想要对这个学生进行信息的添加,就例如添加一个参数:(学生读初中时的年龄),那么代码可想而知,是要进行大调整的。要从最底层的JSH类进行修改,依次往上修改。如下所示:

因此,针对这个问题,可以做出如下优化:

2.2 解决传统开发中的缺陷 

可以尝试不在当前类中创建下级类,也就是不在University类中去创建SHS类,不在SHS类中去创建JHS类,因为这样的话,如果是参数需要变动,每一个类就需要做出调整,耦合性就太高了;

此时,我们只需要将原来由⾃⼰创建的下级类,改为传递的⽅式 (也就是注⼊的⽅式),也就是从自身类以外去获取这个对象,因为我们不需要在当前类中创建下级类了,所以下级类即使发⽣变化(创建或减少参数),当前类本身也⽆需修改任何代码,这样就完成了程序的解耦。

然后通过 Test 类来测试:

package newExample;

public class Test {
    public static void main(String[] args) {
        JHS jhs = new JHS(15);
        SHS shs = new SHS(jhs);
        University university = new University(shs);
        university.init();
    }
}

可以看出,此处的优化结果:如果是要增加或者删除参数,就不再需要大振旗鼓的去进行调整了,只需要对测试类中实例化对象的参数进行修改,以及这个类对应的属性进行修改就可以了。中间调用过程的类也就不再需要每一个都去修改了,也就大大降低了类与类之间的耦合性。

2.3 对比总结:IoC的实现思想 

此处再做出对比:

可以发现,在传统的开发中,是University类控制并创建了SHS对象,SHS类控制并创建JHS对象,而改进之后,控制权发生了反转,不再是上级对象控制下级对象了,而是下级对象把自己注入到上级对象中,下级对象的控制权不再由上级对象控制了。此时如果下级类发生了属性的变化,当前的所有类都是不受影响的,这也就是 IoC 的实现思想,控制权的反转。

3. 理解Spring IoC

Spring 是一个包含了众多工具方法的 IoC容器。

这是对Spirng最核心的总结。 因此Spring是一个 IoC (控制反转)容器,所以它就具备了两个最基础的功能:

  1. 将对象(Bean)存入到容器(Spring)中;
  2. 从容器(Spring)中取出对象(Bean);

将Bean对象存放到容器中,就相当于将以后可能⽤的所有⼯具制作好都放到仓库中,需要的时候直接取就⾏了,⽤完再把它放回到仓库。而传统的开发方式,每一次需要的时候,再去new,就相当于需要每次需要某个工具的时候,才去制作,用完就扔掉,不会保存,下次需要的时候还得重新做,这也就是 IoC容器和普通程序开发的区别。

Spring 是⼀个 IoC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了,(把对象的生命周期交给了 IoC容器) 它本身⼜具备了存储对象和获取对象的能⼒。 

因此 Spring IoC 带来的优点就是:

  1. 使程序之间的耦合性更低了;
  2. 使用起来更加方便,因为不再需要手动去创建对象了,也不用再去关注这个对象背后的依赖关系了;
  3. 使用起来也更加高效;

4. 理解 DI

DI -> Dependency Injection,表示的是 "依赖注入";

依赖注入,指的是在IoC容器运行期间(IoC容器可以用来存取对象),动态的将依赖的某个对象注入到当前类当中的这个行为;就比如,上述例子中,要创建一个University类,需要依赖于SHS对象,那么此时就可以从 IoC容器中,将一个 SHS对象注入到当前的 University类中;

依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情。IoC是一种 "思想",而DI是一种具体的实现。通过引入 IoC容器,利用依赖注入的方式,实现对象之间的解耦。

5. 总结

Spring 是什么?如何理解 Spring? 

spring是一个非常流行的开源框架,包含了众多工具方法的 IoC 容器,因此包含了两个最基础的操作,将bean存储到spring中,从spring中取出来bean对象,spring最核心的就是 IoC。

 IoC 和 DI 是啥?有什么区别?

IoC 控制(权)反转,DI 依赖注入,他们两是从不同维度去分析同一件事,(先从相同点回答,再说不同点),IoC是一个思想,DI是当去运行的时候,动态地将某个依赖拿到当前的框架当中,是具体的实现。

Spring 最核⼼的功能是啥? 

spring最核心的部分是 IoC容器,IoC最基本的操作就是存对象和取对象。

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

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

相关文章

【Scala入门】Scala下载及安装(Windows)以及Idea创建第一个scala项目

目录 一、安装准备 二、Scala下载安装 三、Idea 创建Scala项目 一、安装准备 在安装之前,确保你的电脑上装有Jdk 8(Jdk 1.8),且环境变量配置正确。如果没有安装Jdk,请参照其他文章先安装Jdk 8(Jdk 1.8&a…

vue3之Teleport传送组件

一、前言 Teleport 是 Vue3.x 新推出的功能, 没听过这个词的小伙伴可能会感到陌生;翻译过来是传送的意思,可能还是觉得不知所以,没事下边我就给大家形象的描述一下。 二、Teleport 是什么呢?干嘛用的? T…

【PMP】敏捷项目月报模板

敏捷项目月报怎么写呢?和普通项目周报有什么不同呢?不知道大家思考过没有? 为此咱们把敏捷项目月报和普通项目月报进行了对比,并且给出了一个参考月报模板和实例,供大家参考。 敏捷项目月报模板 [项目名称]敏捷月报 …

大屏如何打造智慧城市?30张大屏模板送你,零代码基础也会用

超500个智慧城市在路上了 根据国际数据公司(IDC)最新发布的《全球半年度智慧城市支出指南》显示,2023年全球智慧城市支出预计将达到1895亿美元。中国智慧城市市场在2023年规模将达到389.2亿美元,超过全球平均水平 德勤咨询发布的一…

电脑端(PC)按键精灵——3.其他命令

电脑端(PC)按键精灵——3.其他命令 前两节说了安装、键盘和鼠标命令,这一章说下其他命令 按键精灵小白入门详细教程: 电脑端(PC)按键精灵—小白入门 详细教程 命令介绍 1. Delay 延时 简介 //1秒=1000毫秒, 1分钟=60000毫秒,…

段式内存管理VS页式内存管理

在讲解段式内存管理、页式内存管理之前,需要了解X86体系结构中的实模式和保护模式相关内容。 在 X86 架构诞生之初,其实是没有虚拟内存的概念的。1978 年发行的 8086 芯片是 X86 架构的首款芯片,它在内存管理上使用的是直接访问物理内存的方…

Java版本-招投标采购系统源代码-高效管控招采流程-降低采购成本

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…

Java数据结构和算法之第五章、LinkedList与链表

一、ArrayList的缺陷 public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable {// ... // 默认容量是10private static final int DEFAULT_CAPACITY 10;//... // 数组&#xff1a;用来存储…

分布式链路追踪之SkyWalking

一 链路追踪简介 在微服务架构中&#xff0c;一次请求往往涉及到多个模块&#xff0c;多个中间件&#xff0c;多台机器的相互协作才能完成。这一系列调用请求中&#xff0c;有些是串行的&#xff0c;有些是并行的&#xff0c;那么如何确定这个请求背后调用了哪些应用&#xff0…

self-attention和cross-attention

为什么Self-Attention要通过线性变换计算Q K V&#xff0c;背后的原理或直观解释是什么&#xff1f; - 知乎回答题主问题题主的问题: 在attention中都经过一个映射&#xff0c;那么建模的相似度是否就没有意义了&#xff1f;个人感觉这…https://www.zhihu.com/question/592626…

是面试官放水,还是公司实在是太缺人?这都没挂,腾讯原来这么容易进···

本人211非科班&#xff0c;之前在字节和腾讯实习过&#xff0c;这次其实没抱着什么特别大的希望投递&#xff0c;没想到腾讯可以再给我一次机会&#xff0c;还是挺开心的。 本来以为有个机会就不错啦&#xff01;没想到能成功上岸&#xff0c;在这里要特别感谢帮我内推的同学&…

CANFD和CAN的区别

文章目录 概念速率数据长度帧格式 概念 FD全称是 Flexible Data-Rate&#xff0c;顾名思义&#xff0c;表示CAN-FD 的帧报文具有数据场波特率可变的特性&#xff0c;即 仲裁场和数据控制场使用标准的通信波特率&#xff0c;而到数据场就会切换为更高的通信波特率&#xff0c; …

瑞云科技副总经理黄金进受邀出席2023广东超聚变生态伙伴大会并作主题演讲

2月10日&#xff0c;2023广东超聚变生态伙伴大会在广东深圳博林天瑞喜来登酒店成功举办。 本次大会以“聚变焕新数字湾区”为主题&#xff0c;通过合作伙伴分享&#xff0c;携手众多合作伙伴共同探讨行业趋势和热点话题&#xff0c;共建合作共赢生态&#xff0c;焕新数字湾区。…

电脑快捷键大全,提高效率靠它了!

案例&#xff1a;电脑快捷键大全 【谁懂啊&#xff01;作为一名打工人&#xff0c;效率真的太重要了&#xff0c;如果有快捷键真的可以使效率翻倍&#xff0c;哪位大神可以总结一下电脑常用的快捷键吗&#xff1f;跪谢了&#xff01;】 在日常使用电脑时&#xff0c;掌握一些…

【网络安全】本地提权漏洞分析

0. 前言 CVE-2023-21752 是 2023 年开年微软第一个有 exploit 的漏洞&#xff0c;原本以为有利用代码会很好分析&#xff0c;但是结果花费了很长时间&#xff0c;难点主要了两个&#xff1a;漏洞点定位和漏洞利用代码分析&#xff0c;欢迎指正。 1. 漏洞简介 根据官方信息&a…

什么是工厂模式?

文章目录 00 | 基础知识01 | 简单工厂模式框架实现应用场景小结 02 | 工厂方法模式框架实现应用场景小结 03 | 抽象工厂模式框架实现应用场景小结 04 | 总结 前面学习了设计模式的基本概念&#xff08;设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结&#xff09;…

浅述 国产仪器仪表 6433D,6433F,6433H,6433L光波元件分析仪

6433系列光波元件分析仪包括6433D&#xff08;10MHz&#xff5e;26.5GHz&#xff09;、6433F&#xff08;10MHz&#xff5e;43.5GHz&#xff09;、6433H&#xff08;10MHz&#xff5e;50GHz&#xff09;、6433L&#xff08;10MHz&#xff5e;67GHz&#xff09;4个型号。 6433系…

Live800:一个好的企业,要懂得怎样与消费者打交道

一个好的企业&#xff0c;不仅要懂得产品之道&#xff0c;更要懂得怎样与消费者打交道。 这不是危言耸听&#xff0c;随着市场经济的高度发展&#xff0c;市场竞争愈来愈激烈&#xff0c;消费者在市场中的主体地位和对企业的决定性作用越来越突出&#xff0c;企业要想生存和发…

牛客竞赛字符串专题 NC237662 葫芦的考验之定位子串(SAM + 后缀链接树上倍增)

题意&#xff1a; 给出一个字符串S&#xff0c;|S| ≤ 250000&#xff0c;给出 Q < 250000 次询问&#xff0c;每次需要回答 S[l, r] 在 S 中共出现了多少次。 思路&#xff1a; 如果使用 SAM&#xff0c;我们提前求出每个状态的 cnt[u]&#xff0c;询问就是要求我们快速…

GPT-5暂时来不了 OpenAI悄然布局移动端

OpenAI彻底用GPT-4带火自然语言大模型后&#xff0c;互联网科技行业的大头、小头都在推出自家的大模型或产品。一时间&#xff0c;生成式AI竞速赛上演&#xff0c;“吃瓜群众”也等着看谁能跑赢OpenAI。 坊间预测&#xff0c;干掉GPT-4的还得是GPT-5。结果&#xff0c;OpenAI的…