1、IOC和DI的关系
ioc即:(控制反转)inversion of control
DI即:(依赖注入)Dependency Injection
两者含义相同都是 Spring 框架的核心概念,只不过这两个称呼是从两个角度描述的同一个概念。其实IOC是实现DI(依赖注入)的一种方式。ioc就是容器,di就是注入这一行为,那么di确实就是ioc的具体功能的实现。而ioc则是di发挥的平台和空间。从某个角度来说他们是可以画等号滴,因为毕竟他们是配合使用的。
2、IOC是什么
IoC 是一种思想,不是什么技术在使用Spring框架后,对象的实例不在由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转,(这就是将控制权由自己交给了别人的行为就叫控制反转(IoC),使用的方法就是依赖注入(DI))这就是控制反转。 就是把本来在类内部控制的对象,反转到类外部进行创建后注入,不再由类本身镜像控制,这就是IOC的本质*即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。*
2.1 如何理解好IOC
它的基本思想是将对象的创建、销毁、依赖关系的维护等控制权从程序代码中转移出去,交由容器来负责管理。在 Spring 中,IoC 容器是负责管理对象之间依赖关系的容器,它负责创建对象、维护对象之间的关系,并在需要时注入依赖。
●控制双方是谁,控制什么
传统方法:类中方法,属性的使用,需要使用者在对象内部创建new一个对象,是主动去创建依赖对象。
在使用Spring框架后,由Spring容器来创建,而IOC就是容器,来控制创建对象。不再由调用者的程序代码直接控制。
主控方:Spring容器(IOC)
被控方:外部资源获取
●什么是反转,反转什么
传统:由我们自己在对象中主动控制去直接获取依赖对象,也就是正转。
反转:*即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。*
就是获取对象的方式反转了,反转的是资源的控制权。
应用程序由主动调用资源,变为被动的等待Spring提供资源
3. DI是什么
DI 是 IoC 的一种具体实现方式,它是指将对象所依赖的其他对象(即依赖)通过构造函数、Setter 方法或其他方式注入到对象中,从而消除了对象之间的耦合关系。在 Spring 中,DI 是通过注解或 XML 配置文件等方式来实现的,它可以使对象之间的依赖关系更加清晰、简单和可维护。
●什么是依赖?
只要是全局属性都是当前类的依赖。
●谁依赖于谁,为什么需要依赖:
应用程序依赖于IoC容器;应用程序需要IoC容器来提供对象需要的外部资源
●谁注入谁,注入了什么:
IoC容器注入应用程序某个对象,应用程序依赖的对象;注入某个对象所需要的外部资源(包括对象、资源、常量数据)