手记

Spring之路(5)--IoC、DI傻傻分不清楚

傻傻分不清楚

很多老铁说起自己的Java水平,经常会提起,本人精通Spring,然后也熟知Spring的核心就是IoC和AOP。

然后一问啥是IoC、啥是DI,就懵了,扯不清楚到底啥是啥,还有的就认为IoC和DI就是一个事,其实还真是有点差别滴。

控制反转是啥

IoC,即Inversion of Control,翻译成中文就是控制反转,那是对啥玩意的控制反转了呢,此处专指依赖项,也就是说对依赖项的控制发生了反转。

具体说明下,正常情况是怎么控制依赖项的呢,例如:

public class Driver {
	//依赖项:姓名
	private String name;
}

我们要在Driver对象中注入String对象,实际上是需要自己创建组件,然后通过构造函数或者set方法注入到Driver中。

那么IoC控制反转的情况下,对依赖项的控制是由容器来实现的,比如Spring容器就可以通过xml配置,将name的值注入到Driver对象中。

之前是程序员控制,之后是容器控制,实际上就是控制权发生了转换,此处学者为之命名控制反转,我个人感觉叫控制转移也是OK的。

依赖注入是啥

DI,全称Dependency Injection,即依赖注入,上面说了控制反转是容器控制依赖项,那么如何将依赖项注入到组件中,有一些具体的方式,比较常用的是依赖查找和依赖注入。也就是说,依赖注入实际上是控制反转的一种具体实现方式

为了便于理解,此处稍微说明下依赖查找和依赖注入的区别:

  • 依赖查找:程序员自己去查找依赖项
  • 依赖注入:在容器中配置好依赖,容器自行装配

Spring采用的是依赖注入的方式,也是主流的方式,肯定是好处多多,这个还得等Spring用的多了才能体会到。现在理解概念就是了。

总结

说白了,如果限定死了就是Spring框架,那么说IoC和DI是一回事,也差不多,毕竟Spring的IoC就是用DI方式实现的。

但是IoC和DI确实不是一个概念,就像去太空并一定是乘飞船(也可能是航天飞机)、去北京不一定是做高铁(也可能是骑自行车)。这个比喻有点扯,将就将就吧。

0人推荐
随时随地看视频
慕课网APP