Spring核心与设计思想(下)

简介: Spring核心与设计思想(下)

解决方案

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


代码如下:

b357991626ab434fb69627363448f760.png从上图也可以看出我们是分别在各自的类中传入了该类所需要的对象,那么对象的创建到达在那里呢?

在另外一个代码,但这个代码其实就和我们整个车的构建是无关的,只是负责构建驱动这个车



b1354f5a69bf4cde8c158afb812180d9.png


代码经过以上调整,⽆论底层类如何变化,整个调⽤链是不⽤做任何改变的,这样就完成了代码之间的解耦,从⽽实现了更加灵活、通⽤的程序设计

1301a0d0315541a09eab6dd633cffaf3.png


规律总结

  • 在传统的代码中对象创建顺序是:Car -> Framework -> Bottom -> Tire
  • 改进之后解耦的代码的对象创建顺序是:Tire -> Bottom -> Framework -> Car

我们发现了⼀个规律:传统代码是 Car 控制并创建了Framework,Framework 创建并创建了 Bottom,依次往下


⽽改进之后的控制权发⽣的反转,不再是上级对象创建并控制下级对象了,⽽是下级对象把注⼊将当前对象中,下级的控制权不再由上级类控制了,这样即使下级类发⽣任何改变,当前类都是不受影响的,这就是典型的控制反转,也就是 IoC 的实现思想


Spring IoC思想的体现

那么Spring的IoC思想体现在哪个地方呢?

本⽂刚开始咱们就讲:Spring 是包含了多个⼯具⽅法的 IoC 容器,这就是对 Spring 最核⼼的总结。“集成多个⼯具⽅法”这事咱们以后慢慢再讲,那如何理解“Spring 是⼀个 IoC容器”这句话呢?


既然Spring是一个IoC(控制反转)的容器,那么重点还在容器这两个字上,那么他就具备两个最基础的功能:

  1. 1.将对象存到容器中
  2. 2.从容器中取出对象

也就是学Spring最核心的功能,就是学习如何将对象存到Spring当中,在从Spring中获取对象的过程中:


我们一开始就说了IoC就是控制权的转移,在这里我们就是把new对象的操作来交给Spring来做了,我们只用在需要的时候把对象从Spring当中取出来就行,这样我们项目代码本身就不要操心对象事情了,Spring 会帮我们管理所有的对象(Bean)


总结:

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


使用Spring的好处:

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


4、DI

DI全称Dependency Injection,当某个java 实例需要另一个java实例时,创建被调用者的工作不是由调用者实现,而是由spring容器来完成,然后注入调用者,因此称为依赖注入


DI的概念

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

⼊”的意思。


dependency,这个词,相信大家并不陌生!

就是我们 在 pom.xml 中 引入依赖的时候,需要用到的标签。

25de4f1d7a9e4d9a83572dc35e1cf03a.png


那么依赖注入又是什么呢?

所谓依赖注⼊,就是由 IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中。所以,依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情——就是指通过引⼊ IoC 容器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦

73a149a0f3a94c209322c353feb39975.png

IoC和DI,在广义上都是一回事!


Ioc和DI的区别

这个时候就会有一个经典的面试题了——IoC和DI有什么区别?

IoC是一种思想,DI是一种实现


假设,我们有一天心情非常好!

决定下班之后,吃顿好的。

这就是一种思想.

但是!我们有说要吃什么吗?

很明显是没有的!

IoC,就是这样的。

我把权限交由 Spring,当我需要使用某个对象的时候,直接向它要。

这哥对象怎么给我的,我不管注!

IoC只关注:是否能拿到这个对象。


而 DI 就是一个具体实现:我准备下班去吃海底捞。

此时,吃什么,是不是就明确落实了!

吃海底捞,就是具体的实现。

DI 关注于 怎么将 依赖 注入 对应的对象里面。



五、总结

1、Spring 是什么?如何理解 Spring?

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

既然 Spring 是一个 IoC 容器(反转控制容器)。

Spring是 存储 IoC【反转控制(后的对象)】 的一个容器。


2、IoC 和 DI 是什么?有什么区别?


Ioc全称Inversion of Control,把创建对象的权利交给容器,对象的实例不再由调用者来创建,而是由容器来创建,容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移带了容器,控制权发生了反转,这就是控制反转。它是spring框架的核心思想之一。


DI全称Dependency Injection,当某个java 实例需要另一个java实例时,创建被调用者的工作不是由调用者实现,而是由spring容器来完成,然后注入调用者,因此称为依赖注入。


IoC - Inversion Of Control(控制反转)

主要是将 对象的权限(创建与销毁)交由 Spring 来管理。

程序员 不必再去 new 对象了!

在使用到某个对象的时候,直接向 Spring 索取,直接使用即可。


DI - dependency injection(依赖注入)

将 引入的依赖 (执行所依赖的对象),拿过来使用。


区别:

IoC 是一种 思想。

DI 是具体的实现。


3、Spring最核心的功能是什么?


既然 Spring 是一个容器,那么,肯定是具有容器的两个核心功能(存 和 取)。

1、将 Bean(反转的对象)存储到 Spring 容器中。

2、将 Bean(反转的对象)从 Spring 容器中取出来。

这也就是 Spring 的 两个核心功能。



相关文章
|
6月前
|
存储 搜索推荐 Java
【JavaEE进阶】 Spring核⼼与设计思想
【JavaEE进阶】 Spring核⼼与设计思想
|
Java 测试技术 开发者
Spring核心与设计思想
Spring是一个用于构建企业级应用程序的开源框架,它为Java开发者提供了一种简化和加速应用程序开发的方式。Spring框架提供了大量的功能和工具,使开发人员能够更轻松地创建各种类型的应用程序,包括Web应用程序、RESTful服务、批处理作业、消息驱动的应用程序等。
127 0
|
存储 搜索推荐 Java
【Java】Spring核心与设计思想
【Java】Spring核心与设计思想
|
存储 Java 程序员
Spring 核心与设计思想
Spring 核心与设计思想
|
存储 Java 应用服务中间件
Spring核心与设计思想(上)
Spring核心与设计思想(上)
|
存储 Java 程序员
Spring核心与设计思想
这篇文章作为Spring篇目的开篇,带领大家认识Spring,知道为什么要用Spring框架,以及了解Spring的核心与设计思想。
121 0
Spring核心与设计思想
|
存储 搜索推荐 Java
Spring【Spring的概述与设计思想】
Spring【Spring的概述与设计思想】
Spring【Spring的概述与设计思想】
Spring框架核心及设计思想
Spring框架核心及设计思想
129 0
Spring框架核心及设计思想
|
存储 搜索推荐 Java
【Spring】Spring 核心与设计思想
Spring是什么? 什么是容器? 什么是IoC? 传统程序开发 控制反转式程序开发 两种开发方式对比总结 理解SpringIoC DI 概念说明
【Spring】Spring 核心与设计思想
|
缓存 JavaScript
spring5源码系列--循环依赖的设计思想
spring5源码系列--循环依赖的设计思想
123 0