这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战”
IOC--Inversion of Control
即控制反转,不是什么技术,而是一种设计思想.IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.
所谓的IOC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西给你,同时也把你交给其他需要你的东西,所有的类的创建,销毁都是由spring来控制,也就是说控制对象的生命周期不再是引用它的对象,而是spring,对于某个具体的对象而言,以前是它控制其他对象 ,而现在所有的对象都由spring控制,所以这就叫控制反转.
DI--Dependency Injection
即依赖注入组件之间依赖关系由容器在运行期决定,即由容器动态的将某个依赖关系注入到组件当中,依赖注入的目的并非为软件系统带来更多的功能,而是为了提升组件重复使用的频率,并为系统搭建一个灵活可扩展的平台,通过依赖注入我们只需要使用简单的配置,而不需要任何代码就可以指定目标需要的资源,完成业务逻辑,而不需要关心具体的资源来自何处,由谁实现的.
如果程序中A需要依赖B才能正常进行,而这时候B不是自己创建的而是由spring容器注入给A的,spring会在适当的时候创建B,然后像打针一样注入给A,所以依赖注入的名字就是这么来的.那么DI是如何实现的呢? Java 1.3之后一个重要的特征就是反射(reflection) ,它允许程序在运行的时候动态的生成对象,执行对象的方法,改变对象的属性,spring就是通过反射来注入的.
IOC和DI有什么关系?
IOC 是一个设计思想, DI 是IOC 在spring 的实现方式