BlessingCR’s Blog
BlessingCR’s Blog

IoC

IoC(Inverse of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。不过, IoC 并非 Spring 特有,在其他语言中也有应用。

为什么叫控制反转?

  • 控制 :指的是对象创建(实例化、管理)的权力
  • 反转 :控制权交给外部环境(Spring 框架、IoC 容器)
error

IoC 解决了什么问题

IoC 的思想就是两方之间不互相依赖,由第三方容器来管理相关资源。这样有什么好处呢?

  1. 对象之间的耦合度或者说依赖程度降低;
  1. 资源变的容易管理;比如你用 Spring 容器提供的话很容易就可以实现一个单例。

例如:现有一个针对 User 的操作,利用 Service 和 Dao 两层结构进行开发

在没有使用 IoC 思想的情况下,Service 层想要使用 Dao 层的具体实现的话,需要通过 new 关键字在UserServiceImpl 中手动 new 出 IUserDao 的具体实现类 UserDaoImpl(不能直接 new 接口类)。

https://vipkshttps13.wiz.cn/editor/d43a29e0-2b90-11ed-a050-f704bb07f03a/daf4d106-b7a0-41c5-bb19-d2cfc58e1e22/resources/lRXIhZ3r-3lPPUBjXtXapP_tbIqa7zR69VLDVVYfzhI.png?token=W.aQulVVli4GHcNmJTCiv9A7m_qIu41Vng6uXA8BZBSfY3T19HDPsF1QpPC6VGk_A

很完美,这种方式也是可以实现的,但是我们想象一下如下场景:

开发过程中突然接到一个新的需求,针对对IUserDao 接口开发出另一个具体实现类。因为 Server 层依赖了IUserDao的具体实现,所以我们需要修改UserServiceImpl中 new 的对象。如果只有一个类引用了IUserDao的具体实现,可能觉得还好,修改起来也不是很费力气,但是如果有许许多多的地方都引用了IUserDao的具体实现的话,一旦需要更换IUserDao 的实现方式,那修改起来将会非常的头疼。

https://vipkshttps13.wiz.cn/editor/d43a29e0-2b90-11ed-a050-f704bb07f03a/daf4d106-b7a0-41c5-bb19-d2cfc58e1e22/resources/na-MejY1_KqwHY0Atzp24m7wfdfz6vwJ-T51ORx9HTk.png?token=W.aQulVVli4GHcNmJTCiv9A7m_qIu41Vng6uXA8BZBSfY3T19HDPsF1QpPC6VGk_A

使用 IoC 的思想,我们将对象的控制权(创建、管理)交有 IoC 容器去管理,我们在使用的时候直接向 IoC 容器 “要” 就可以了

https://vipkshttps13.wiz.cn/editor/d43a29e0-2b90-11ed-a050-f704bb07f03a/daf4d106-b7a0-41c5-bb19-d2cfc58e1e22/resources/AhPQg5brZRLAOqapi3cGtSIoRsCQI8-3k2hq-Cvm7-Y.png?token=W.aQulVVli4GHcNmJTCiv9A7m_qIu41Vng6uXA8BZBSfY3T19HDPsF1QpPC6VGk_A

发表回复

textsms
account_circle
email

BlessingCR’s Blog

IoC
IoC(Inverse of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。不过, IoC 并非 Sp…
扫描二维码继续阅读
2023-02-21