控制反转(IOC)
IOC,Inversion of Control,它是一种设计思想,指的是将原本在程序中由我们手动创建对象的控制权,交给Spring框架来管理,将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。
lOC由专门的容器来帮忙创建对象,将所有的类都放在Spring容器(DefaultListableBeanFactory, bean工厂)中,
使用IOC的好处:
降低了对象之间的耦合度,也增加了项目的可维护性,灵活性。
传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高度耦合;有了Spring IOC容器之后,把创建和查找依赖对象的控制权交给了容器,由容器进行依赖对象的注入。所以对象与对象之间是松散耦合,有利于功能复用。更重要的是使得程序的整个体系结构变得非常灵活。
lOC容器就像是一个工厂,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。例如。在实际项目中,一个Service接口可能依赖了很多其他接口,如果采用手动new依赖对象的话。我们需要搞清挂所有依赖对象的构造方法。使用了Spring框架之后,我们只需要配置好,然后在需要的地方引用就行。大大增加了项目的可维护性,而且降低了开发难度。
依赖注入(DI):
DI,Dependency lnjection,指的是应用程序在运行时依赖IOC容器来动态注入组件所需要的某个依赖对象。Spring 的DI具体就是通过反射实现注入的,反射允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性等。
理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么?
谁依赖于谁:应用程序依颗于IOC客器;
为什么需要依赖:应用程序需要IOC容器来提供组件需要的外部资源
谁注入谁:IOC容器注入应用程序某个对象,即应用程序依赖的对象
注入了什么:注入某个对象所需要的外部资源(包括对象、资源、常量数据)
好处:通过依赖注入。我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
总结:
控制反转是目标。依赖注入是我们实现控制反转的一种手段。
控制反转:控制反转:我们将创建对象的控制权交给了Spring。由Spring来控制对象的创建。
依赖注入:应用程序在运行时依赖IOC容器来动态注入组件所需要的某个依赖对象。