关于 Spring 是什么

Spring 是什么

        我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级的应⽤程序开发起来更简单。
⽤⼀句话概括 Spring 就是: Spring 是包含了众多⼯具⽅法的 IoC 容器。

什么是 IoC 容器

        容器就是一个能 存 和 取 东西的载具。IoC(Inversion of Control)翻译成中⽂是“控制反转”的意思,也就是说 Spring 是⼀个“控制反转”的容器,详述地说就是 控制权的反转。

比如我现在要创建一个“车”对象,然后就得创建一个实例,但是“车”依赖于“车身”,“车身”又依赖于“底盘”,同时“底盘”又依赖于“轮胎”。因此,代码的实现就是这样的:

 

随着时间的推移,有的人不喜欢这个大轮胎,就像换个小轮胎,那么此时别的类也得跟着一起变:

 

如果有的人又喜欢别的颜色别的车身时,改变的地方就会很多,因为耦合太高了(控制权在自己手上),因此 IoC 容器就出现了,当一个类依赖另一个类时,不会自己创建了,而是统一交给一个地方创建(控制权都在他这里),此时,当再创建一个 car 对象时就不需要创建依赖的类了,而是在进行实例的时候把依赖的作为参数传过来就行,这样就算哪个地方改了参数也不影响,因为传过来的时候就已经都包含了:

 这时候,有人喜欢大轮胎的时候只需要改变一个地方就行了,这就实现了“解耦”(控制权交出去了)。

关于 Spring IoC

        Spring IoC 就是对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存储对象和获取对象的能⼒。

        因为传统在创建对象的时候出了这个作用域就用不了了,然后下次再想用的时候就还得再创建。new 对象的⽅式相当于,每次需要⼯具了,才现做,⽤完就扔掉了也不会保存,下次再⽤的时候还得重新做。而 Spring IoC 相当于将以后可能⽤的所有⼯具制作好都放到仓库中,需要的时候直接取就⾏了,⽤完再把它放回到仓库。

关于 DI

        说到 IoC 不得不提的⼀个词就是“DI”,DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注⼊”的意思。

        所谓依赖注⼊,就是在 IoC 容器运⾏期间,动态地将某些依赖关系注⼊到对象之中。所以,依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情,即通过引⼊ IoC 容器,然后利⽤依赖关系注⼊的⽅式,实现对象之间的解耦。
IoC 相当于是实现解耦的一种思想,DI 相当于是实现解耦的一种方式(技术)。 

总结

        Spring 就是一个包含了多种工具和方法的 IoC 容器。把 Bean 对象存进 IoC 容器中,从 IoC 中把 Bean 对象取出来。

        IoC 和 DI 描述的是同一件事,只是再细致区分的话会有所不同:IoC 是一种思想,DI 是一种具体实现的技术。

        Spring 最核心的功能就是 IoC 容器的 存 和 取。

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

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

相关文章

九章云极DataCanvas公司DingoDB完成中国信通院权威多模数据库测试

2024年5月16日,九章云极DataCanvas公司自主研发和设计的开源多模向量数据库DingoDB顺利完成中国信息通信研究院(以下简称中国信通院)多模数据库产品测试。本次测试的成功标志着DingoDB在技术能力、性能表现和产品稳定性方面得到了权威机构的高…

python深入探索斐波那契数列:代码示例与不满足的外围条件

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、斐波那契数列的初步实现 二、外围条件的不满足情况 总结 一、斐波那契数列的初步实现 …

Presto 从提交SQL到获取结果 源码详解(2)

逻辑执行计划: //进入逻辑执行计划阶段 doAnalyzeQuery().new LogicalPlanner().plan(analysis);//createAnalyzePlan createAnalyzePlan(analysis, (Analyze) statement);//返回RelationPlan,(返回root根节点,逻辑树上包含输出字…

docker容器中解决中文乱码

1. 找到dockerfile文件 2. 编辑Dockerfile 添加 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 3. 生成新的镜像文件 FROM java17_yinpeng:latest MAINTAINER YP <2064676101QQ.COM> ADD jiquan_online_chat.jar jiquan_online_chat #CM…

Socks5代理IP有什么特点:

小熊IPSocks5代理IP比其他类型的代理具有更多的灵活性和安全性。SOCKS5代理的另一个优点是您可以将其用于任何类型的流量&#xff08;TCP或UDP&#xff09;。您可以有选择地隐藏流量的特定部分&#xff08;基于应用程序&#xff09;&#xff0c;从基于TCP的连接&#xff08;如H…

【HarmonyOS】取消页面转场动画

【HarmonyOS】取消页面转场动画 问题背景&#xff1a; 当A页面切换至B页面时&#xff0c;系统会自带左右进场退场的动画效果。一般来说&#xff0c;该效果是ok的&#xff0c;但是在特殊场景下&#xff0c;例如&#xff1a; A页面跳到B页面&#xff0c;又跳到C页面。C页面直接返…

存储型XSS

前言 什么是存储型xss&#xff1a; 提交恶意xss数据&#xff0c;存入数据库中&#xff0c;访问时触发。 存储型xss和反射型xss区别&#xff1a; 存储型存入数据库中&#xff0c;可持续时间长&#xff0c;而反射型持续时间短&#xff0c;仅对本次访问有影响&#xff0c;反射型一…

中华活页文选高中版投稿发表

《中华活页文选&#xff08;高中版&#xff09;》创刊于1960年&#xff0c;是中宣部所属中国出版传媒股份有限公司主管、中华书局主办的国家级基础教育期刊&#xff0c;曾获得“中国期刊方阵双效期刊”、国家新闻出版广电总局推荐的“百种优秀报刊”等荣誉称号。本刊以高中学科…

TCP连接优化

TCP连接未释放 断开连接后TCP有两个状态&#xff1a; 一个是TIME_WAIT&#xff0c;一个是CLOSE_WAIT&#xff0c;是不同的两个状态 TIME_WAIT&#xff1a;出现在主动断开方&#xff0c;发出最后一个ACK后 CLOSE_WAIT&#xff1a;出现在被动断开方&#xff0c;收到主动断开方的…

Day 6:2981. 找出出现至少三次的最长特殊子字符串 I

Leetcode 2981. 找出出现至少三次的最长特殊子字符串 I 给你一个仅由小写英文字母组成的字符串 s 。 如果一个字符串仅由单一字符组成&#xff0c;那么它被称为 特殊 字符串。例如&#xff0c;字符串 “abc” 不是特殊字符串&#xff0c;而字符串 “ddd”、“zz” 和 “f” 是特…

数据容器:set(集合) 更新啦!

数据容器&#xff1a;set&#xff08;集合&#xff09; 1.集合的定义方式 {元素, 元素, 元素} # 定义集合 my_set {"欣欣向荣", "嘉嘉", "red", "欣欣向荣", "嘉嘉", "red", "欣欣向荣", "嘉嘉…

Spring BeanPostProcessor的前置魔法:揭秘与启迪

1. 引言 Spring框架的BeanPostProcessor是一个强大的扩展点&#xff0c;允许开发者在Spring IoC容器实例化、配置和初始化bean前后插入自定义逻辑。其中&#xff0c;前置方法postProcessBeforeInitialization是BeanPostProcessor接口中的一个重要方法&#xff0c;它在bean的初…

数据库中的视图:定义、作用及使用场景

在数据库的世界中&#xff0c;视图&#xff08;View&#xff09;是一个虚拟的表&#xff0c;其内容由查询定义。视图同真实的表一样&#xff0c;包含一系列带有名称的列和行数据。但是&#xff0c;视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询…

读《营销管理》之三大市场结果

由于四大市场力量的存在&#xff0c;有形无形的改变着世界&#xff0c;在新的营销现实中&#xff0c;消费者、公司和竞争环境都经历了显著的变化&#xff0c;这些变化赋予了他们新的能力&#xff0c;并改变了他们互动的方式。读《营销管理》之四大市场力量-CSDN博客以下是详细解…

性能猛兽:OrangePi Kunpeng Pro评测!

1.引言 随着物联网和嵌入式系统的不断发展&#xff0c;对于性能强大、资源消耗低的单板计算机的需求也日益增加。在这个快节奏的技术时代&#xff0c;单板计算机已成为各种应用场景中不可或缺的组成部分&#xff0c;从家庭娱乐到工业自动化&#xff0c;再到科学研究&#xff0…

差分曼彻斯特编码详解

这是一种双向码&#xff0c;和曼彻斯特编码不同的是&#xff0c;这种码元中间的电平转换边只作为定时信号&#xff0c;不表示数据。数据的表示在于每一位开始处是否有电平转换&#xff1a;有电平转换则表示0&#xff0c;无则表示1。然后这就出现一个问题&#xff0c;很多小伙伴…

Vue2源码解析-生命周期

两个文件&#xff0c;一个html一个js <body><div id"app"></div> </body> <script src"./Vue.js"></script> <script>new Vue({el: #app,data: {str: "你好"},beforeCreate() {console.log(beforeCr…

App Inventor 2 低功耗蓝牙BLE 两种通信方式:扫描和广播

低功耗蓝牙&#xff0c;也称为蓝牙 LE 或简称 BLE&#xff0c;是一种类似于经典蓝牙的新通信协议&#xff0c;不同之处在于它旨在消耗更少的功耗&#xff0c;同时保持可比的功能。 因此&#xff0c;低功耗蓝牙是与耗电资源有限的物联网设备进行通信的首选。BluetoothLE 扩展需…

2023年简单易用的透明加密软件--安秉网盾企业数据防泄密方案

随着移动互联网的兴起&#xff0c;企业对对网络安全的需求日益增加&#xff0c;透明加密软件技术也是近些年企业对文件图纸防泄密的主要解决技术方案。但是在广大企业在使用透明加密技术做防泄密时因为自身对透明加密技术的不是很深入的了解&#xff0c;造成企业在使用过程中还…

DiffBIR论文阅读笔记

这篇是董超老师通讯作者的一篇盲图像修复的论文&#xff0c;目前好像没看到发表在哪个会议期刊&#xff0c;应该是还在投&#xff0c;这个是arxiv版本&#xff0c;代码倒是开源了。本文所指的BIR并不是一个single模型对任何未知图像degradation都能处理&#xff0c;而是用同一个…