- 所谓的IoC,就是由容器来控制对象的生命周期和对象之间的关系。控制对象生命周期的不再是引用它的对象,而是容器,这就叫控制反转(Inversion of Control)。
- 以前是我们想要什么就自己创建什么,现在是我们需要什么容器就帮我们送来什么
假如A想要找一个女朋友,以前没有IoC,那么A只能自食其力,自己去搭讪,去要微信,但是有了IoC之后,A可以去找婚介所来帮忙给自己介绍,婚介所就相当于一个IoC容器,A就是一个对象,A需要的女朋友就是另一个对象,A不用关心女朋友是怎么来的,只需要告诉婚介所自己需要什么样的女朋友,婚介所就帮忙去找;
- Spring倡导的开发方式就是这样,所有类的创建和销毁都通过Spring容器来,不再是开发者去new了,这样就实现了对象的解耦;
于是,对于某个对象来说,以前是它控制它依赖的对象,现在是所有对象都被Spring控制;
接下来说下什么是DI
- IOC是一种思想,DI是实现IOC的具体方式,比如说利用注入机制(如构造器注入,Setter注入)将依赖传递给目标对象;
打个比方,你现在想吃韭菜馅的饺子,这时候就有人用针管往你吃的饺子里注入韭菜鸡蛋馅。就好像 A 类需要 B 类,以前是 A 类自己 new 一个 B 类,现在是有人把 B 类注入到 A 类里。
为什么要使用IoC呢?
-
在平时的 Java 开发中,如果我们要实现某一个功能,可能至少需要两个以上的对象来协助完成,在没有 Spring 之前,每个对象在需要它的合作对象时,需要自己 new 一个,比如说 A 要使用 B,A 就对 B 产生了依赖,也就是 A 和 B 之间存在了一种耦合关系。
有了 Spring 之后,就不一样了,创建 B 的工作交给了 Spring 来完成,Spring 创建好了 B 对象后就放到容器中,A 告诉 Spring 我需要 B,Spring 就从容器中取出 B 交给 A 来使用。
至于 B 是怎么来的,A 就不再关心了,Spring 容器想通过 new来 创建 A 还是 new 创建 B,无所谓。
这就是 IoC 的好处,它降低了对象之间的耦合度,使得程序更加灵活,更加易于维护。