如何理解Spring

这篇具有很好参考价值的文章主要介绍了如何理解Spring。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用一句话概括:Spring是包含众多工作方法的IOC容器

怎么理解这句话?如何理解IOC?如何理解容器?

什么是IOC

IOC是Inversion of Control的缩写,译为“控制反转”。那什么是“控制反转”呢?
举个例子,我们要抽象一辆车,车依赖于车身,车身依赖于底盘,底盘依赖于车轮。
image.png
在没有使用spring之前,实现代码如下

public class Old {
	static class Car{
		private FrameWork frameWork;
		public Car(int size) {
			frameWork = new FrameWork(size);
		}
		public void init() {
			System.out.println("执行了car的init方法");
			frameWork.init();
		}
	}
	static class FrameWork{
		private Bottom bottom;
		public FrameWork(int size) {
			bottom = new Bottom(size);
		}
		public void init() {
			System.out.println("执行了frameWork的init方法");
			bottom.init();
		}
	}
	static class Bottom{
		private Tire tire;
		public Bottom(int size) {
			tire = new Tire(size);
		}
		public void init() {
			System.out.println("执行了bottom的init方法");
			tire.init();
		}
	}
	static class Tire {
		public int size;

		//此时添加一个属性
		//        public String color;
		//        public Tire(int size, String color) {
		//            this.size = size;
		//        }
		public Tire(int size) {
			this.size = size;
		}
		public void init() {
			System.out.println("轮胎尺寸:" + size);
		}
	}
	public static void main(String[] args) {
		Car car = new Car(30);
		car.init();
	}
}

如果给轮胎添加一个颜色属性,那么整个调用链都要进行改动,每个类的构造方法都需要进行调整,整个代码的耦合度就非常高了。在上述代码中对象的生命周期是由程序员来控制的,程序员new创建对象, 销毁对象。而如果引入IOC思想,将对象的创建,销毁的权利交给Spring,来Spring来帮我们管理对象,程序员就不用手动new对象,这个过程就是“控制反转”。
接下来利用IOC思想来改造上面代码

public class Ioc {
	static class Car{
		private FrameWork frameWork;
		public Car(FrameWork frameWork) {
			this.frameWork = frameWork;
		}
		public void init() {
			System.out.println("执行了car的init方法");
			frameWork.init();
		}
	}
	static class FrameWork{
		private Bottom bottom;
		public FrameWork(Bottom bottom) {
			this.bottom = bottom;
		}
		public void init() {
			System.out.println("执行了frameWork的init方法");
			bottom.init();
		}
	}
	static class Bottom{
		private Tire tire;
		public Bottom(Tire tire) {
			this.tire = tire;
		}
		public void init() {
			System.out.println("执行了bottom的init方法");
			tire.init();
		}
	}
	static class Tire {
		public int size;

		//此时添加一个属性
		//        public String color;
		//        public Tire(int size, String color) {
		//            this.size = size;
		//        }
		public Tire(int size) {
			this.size = size;
		}
		public void init() {
			System.out.println("轮胎尺寸:" + size);
		}
	}
	public static void main(String[] args) {
		Tire tire = new Tire(20);
		Bottom bottom = new Bottom(tire);
		FrameWork frameWork = new FrameWork(bottom);
		Car car = new Car(frameWork);
		car.init();
	}
}

当要给车轮添加新的属性时,只需要修改Tire类的构造方法,而其他类不需要进行修改,整个调用链没有进行调整,代码的耦合度得到降低。
image.png
没有引入IOC思想时,Car控制并创建FrameWork,FrameWork控制并创建Bottom,以此往下。而改进后的控制权发生了反转,不再是上级对象创建并控制下级对象了,而是下级对象注入到当前对象中,下级的控制权不在由上级类控制了,这样即使下级类发生了改变,当前类也不受影响的,这就是典型的“控制反转”。

什么是容器

容器顾名思义就是存放东西的装置。咱们前面学的集合就是用来存放数据的,学Servlet时用的tomcat就是用来存放Web网站的。而这里的IOC容器就是用来存放托管对象,需要使用到对象时就从容器中取,想要托管对象时就往容器中放。

DI

DI是“Dependency Injection"的缩写,译为”依赖注入“。IOC是设计思想,而DI就是依据IOC思想实现出来的具体技术。DI帮助我在IOC容器运行期间,动态的把对象注入到另外一个对象中。所以IOC和DI本质没有区别

Spring是通过引入IOC容器,利用DI依赖注入的方式,实现了对象之间的解耦合文章来源地址https://www.toymoban.com/news/detail-467297.html

到了这里,关于如何理解Spring的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蚁剑连接一句话木马演示

    需要准备 一台虚拟机作为服务器,一台作为攻击机(可用主机),将虚拟机的网络都设置为桥接。 我这里服务器用win2008R2系统 攻击机用win10 接下来我会演示 php 的一句话木马 其他脚本语言的一句话木马使用过程和这个差别不大 在服务器上安装phpstudy 快速搭建服务器 安装成

    2024年02月14日
    浏览(19)
  • java安全——jsp一句话木马

    提示:以下是本篇文章正文内容,下面案例可供参考 http://localhost:8003/index.jsp?cmd=whoami 不会回显执行的结果只能在后台打印一个地址,常用来反弹shell 代码如下(示例):

    2024年02月11日
    浏览(19)
  • 一句话解释什么是出口IP

    出口 IP 是指从本地网络连接到公共互联网时所使用的 IP 地址。这个 IP 地址是由 Internet 服务提供商(ISP)分配给你的,它可以用来标识你的网络流量的来源。如果你使用的是 NAT(网络地址转换)技术,则在 NAT 设备内部会进行地址转换,使得多个设备可以共享同一个公共 I

    2024年02月08日
    浏览(20)
  • 文件上传漏洞—一句话图片马制作

    提要 :在文件上传漏洞中,通常需要上传脚本类型的文件至服务端执行,获取WebShell,但是网站会严格过滤脚本类型的文件,这个时候便可以通过图片马来尝试突破。 简介 :在图片格式文件(JPG,PNG和GIF等)中添加隐藏一句话木马,利用文件包含漏洞,Web容器解析漏洞和.

    2024年02月07日
    浏览(21)
  • 解封ChatGPT我只用了一句话

    文章前言 ChatGPT作为一个AI语言模型可以帮助使用者生成各种各样的文字内容,目前已被广泛应用于各种语言任务中,例如:文本生成、机器翻译、问答系统等,基于保障使用者权益和维护良好的价值观,官方限制ChatGPT不能回答不当言论(攻击或侮辱性)、敏感内容和带有偏见的

    2024年02月16日
    浏览(15)
  • 渗透干货|史上最全一句话木马

    PHP //可执行命令一句话 普通一句话 PHP系列 过狗一句话 【----帮助网安学习,以下所有学习资料文末免费领!----】 几个变性的php–过防火墙 过狗效果都不错: 密码-7 phpv9 高版本拿shell ASP asp 一句话 ASP过安全狗一句话 ASPX系列 ASPX一句话的 过安全狗效果不怎么样 不过我认为能

    2024年04月25日
    浏览(19)
  • 一句话介绍大数据各种名词及其特点

    大数据 :传统PC无法处理的。数据大、数据类型繁多、处理速度快、价值密度低。 Hadoop :能够对大数据进行分布式处理的软件框架、这种处理具有高效、可靠、可伸缩的特点。Hadoop的特点:高效率、高可靠、高容错、高可拓展。成本低、Linux运行支持多语言。 SSH :建立在应用

    2024年02月03日
    浏览(15)
  • AI PPT 一句话搞定PPT讲演搞

    相信大家在职场中,一定会接触过写PPT,经常会把你搞得焦头烂额。在大部分的公司里,写PPT汇报又是不可能逃避的事情。但随着AI时代的到来,有很多AI帮你写PPT的工具也逐渐崭露头角,可以自动帮助你制作出华丽的PPT,给你的职场生活带来极大的便利。这些AI写PPT工具可以

    2024年02月13日
    浏览(20)
  • 一句话木马攻击复现:揭示黑客入侵的实战过程

    这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。 准备环境 OWASP虚拟机 xfp 7与xshell 7 ​  DVWA系统默认的账号密码均为:admin/admin  ​ 攻击payload 这个命令的目的是在服务器上创建一个名为 shell.php 的文件,其中包含 PHP 代码。让我们逐步分析该命令:

    2024年02月11日
    浏览(18)
  • 【AI绘画】给我一句话,送你一幅画。

    什么是AI绘画 通俗的说,AI绘画就是AI通过学习训练出自己的思考模型,然后绘画。 AI绘画优劣势 你可以把AI理解为一个天赋非凡的外国绘画神童 优势 (效率高) 天赋非凡 :绘画的速度非常快,效率非常高,图片也很精美 不足 (理解局限) 外国 :相对国内而言,训练模型

    2024年02月09日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包