SSM - Spring - 理解控制反转 (IoC, Inverse Of Control)、DI依赖注入

理解控制反转 (IoC, Inverse Of Control)、DI依赖注入

根据故事来理解控制反转:

世界上有上千种水果,如果我想找到我想要的一种口味的水果,那么我们需要走南闯北,周游世界去找,代价非常大。这时候商人发现了商机,开起了水果店,我们只需要在水果店,就可以尝到各种水果。

这个例子如同控制反转,我们使用者不用再去找实例(水果),只需要告诉水果店老板(代理),我们需要什么水果即可获得什么水果,这就是一个最简单的控制反转的例子。

另一个例子是租房,如果我们需要租房,那么我们需要到处去找房子,会花费很多时间,如果我们通过中介,中介即将各种信息整合起来,那么我们会减少很多的时间。

  • IoC控制反转,全称为 Inverse Of Controle,是一种设计理念。
  • 由代理人来创建于管理对象,消费者通过代理人来获取对象。
  • IoC目的是降低程序与程序之间的直接耦合。

IoC控制翻转的方式

  • 传统的方式

SSM - Spring - 理解控制反转 (IoC, Inverse Of Control)、DI依赖注入_第1张图片

如上图所示,Service类用于处理业务逻辑,Dao是CRUD操作的封装。如果在开发中有分工合作,如果A 开发了300多个Dao类,这时候B需要去使用A写的 Dao类,需要对300多个一个一个的去了解其功能,很容易出错,这时候出了一个 IoC容器来处理这个问题。

  • IoC 控制翻转

SSM - Spring - 理解控制反转 (IoC, Inverse Of Control)、DI依赖注入_第2张图片

上图中,IoC将Dao对象创建好, 这一层一般是Spring层,这个容器类似于水果摊盛放水果的容器,它负责创建与管理对象,所以称作IoC容器,Service不再创建Dao,这时候根据DI依赖注入来动态的创建对象。这时候A不再需要知道B写了多少Dao,B也不用需要知道A需要哪些对象,主需要IoC来管理。

有了 IoC,我们可以说 Service和 Dao是解耦的。

DI依赖注入

  • IoC是设计理念,是线代程序设计遵循的标准,是宏观目标(在语言之上,适用于任何面向对象的语言)
  • DI(Dependency Injection)是具体技术实现,是微观实现
  • DI在Java中利用 “反射(Reflection)”进行对象注入

你可能感兴趣的:(SSM,Spring)