【Spring】IOC(控制反转)和DI(依赖注入)的深度总结

一、为什么需要IOC

我们知道对于面向对象编程而言,一个功能的实现是由一个个功能对象组成,这些对象之间是相互制约的,如图:
在这里插入图片描述
在这里插入图片描述

从上图中我们可以发现,类和类之间是相互依赖相互制约的,少了谁都转不起来,可以说耦合性极高

为了解决对象之间的耦合度过高的问题,软件专家Michael Mattson 1996年提出了IOC理论,用来实现对象之间的“解耦”。

二、什么是IOC

IOC的思想是借助于“第三方”实现具有依赖关系的对象之间的解耦,如图:
在这里插入图片描述
从上图中我们可以发现,原本相互“粘连”的类(A B C D),不再像以前那样直接作用了,通过使用名为“IOC容器”的东西使 A B C D 产生联系。

换句话说,以前一个模块需要什么类需要其自己去找“new一个”,IOC实现了对指定类的托管,模块需要什么类,直接去IOC容器中去取就可以了。


在spring中怎么让IOC容器托管指定的类呢?
往期的文章中有关于将指定的类注入到IOC中的两种方式:
通过构造方法进行注入【点击查看】

通过set方法进行注入【点击查看】

注入完成之后,我们获取对象的方式也发生了改变,通过如下的方式进行获取(往期的文章讲过)【点击查看】

public class MyTest {
    @Test
    public void  test(){
        ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student stu = (Student)application.getBean("stu");
        System.out.println(stu.toString());

    }
}




三、IOC与DI的关系

2004年,Martin Fowler发表了<< Inversion of Control Containers and the Dependency Injection pattern>>【点击查看】,经过详细地分析和论证后他得出了答案:“获得依赖对象的过程被反转了”,他称为 "依赖注入(Dependency Injection)”

控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入

所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系(对象)注入到IOC容器之中

总结:
IoC是一种设计模式,是一种思想,相当于一个容器,而DI就好比是实现IOC的一种方式。
作用是通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。


四、IOC的缺点

  1. 由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗

  2. 对于Spring而言,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。

  3. 生成一个对象的步骤变的稍微复杂了,对于不习惯这种方式的人,会觉得有些别扭和不直观。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值