IoC(控制反转)和DI(依赖注入)
来源:互联网 发布:遥控怎么切换网络电视 编辑:程序博客网 时间:2024/06/06 02:12
一、理论
1、IoC是什么
IoC(Inversion of Control),即“控制反转”,是一种设计思想。
●谁控制谁:一般开发,当前对象创建依赖对象,当前对象控制依赖对象;IoC则有一个容器来创建这些对象,由容器来控制对象的创建和使用。
●何为反转:一般开发,在当前对象中控制依赖对象,这是正;反转则是由容器控制依赖对象。容器创建和注入依赖对象,当前对象只是被动的接受依赖对象。
2、IoC能做什么
IoC 设计思想能指导我们如何设计出松耦合、更优良的程序。传统应用程序在类内部创建依赖对象,从而导致类与类之间紧耦合;有了IoC容器后,把创建和使用依赖对象的控制权交给了容器,所以对象与对象之间是 松耦合,也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
●主从换位:当前对象处于主导地位,在IoC/DI思想中,当前对象处于从属地位,被动等待容器来创建和注入依赖对象。
●设计思想:好莱坞法则:“别找我们,我们找你”;即由容器帮当前对象找依赖对象并注入,而不是由当前对象主动去找。
3、IoC和DI
DI(Dependency Injection),即“依赖注入”:即由容器动态的将某个依赖组件注入到当前组件中。依赖注入提升了组件重用的方便性、灵活性、可扩展性。通过依赖注入机制,我们只要简单的配置,无需修改任何代码就可以完成新的业务逻辑,而不需要关心所需组件来自何处,由谁实现。
●谁依赖谁:组件依赖容器;
●为什么需要依赖:组件需要容器来提供所需的其他组件;
●谁注入谁:容器把一个组件注入另一个组件;
IoC和DI什么关系呢?其实它们是同一个概念的不同描述。
IoC是在系统运行中,动态的向某个对象提供它所需要的其他对象。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,需要一个Connection对象,至于这个Connection对象怎么创建,何时创建,A不需要知道。spring会在适当的时候创建一个Connection对象,注入到A当中。
A需要依赖 Connection对象才能正常运行,而这个Connection对象是由spring注入到A中的,DI(依赖注入)的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后的反射(reflection),它允许程序在运行的时候动态的创建对象、执行方法、改变对象的属性,spring就是通过反射来实现注入的。
二、总结
一般开发中,我们要实现某一个功能,需要多个对象来完成,要使用new Object() 将合作对象创建出来,当前对象需要哪个合作对象,就去创建所需对象。
使用了Spring作为容器后,创建合作对象的工作是由容器来做的,容器创建好对象,存储到容器里面,需要时从容器里取出对象,交给使用者使用。
IoC(控制反转)对象控制权的转移。以前创建对象的主动权和创建时机是由组件控制的,而现在这种权力转移到容器,容器就是用来创建对象的工厂。
DI(依赖注入)其实就是IoC的另外一种说法。
- IOC(控制反转) DI(依赖注入)
- IoC(控制反转)和DI(依赖注入)
- 解构控制反转(IoC)和依赖注入(DI)
- 控制反转(IoC)和依赖注入(DI)
- ioc(控制的反转) 和di(依赖注入)
- Spring IOC(控制反转)和DI(依赖注入)
- 控制反转(IOC)和依赖注入(DI)
- 依赖注入(DI) 和 控制反转(IoC)
- PHP控制反转(IOC)和依赖注入(DI)
- 控制反转(IOc)和依赖注入(DI)
- 依赖注入(DI)和控制反转(IOC)
- PHP控制反转(IOC)和依赖注入(DI)
- IoC(控制反转)和DI(依赖注入)
- 依赖注入(DI)和控制反转(IOC)
- (3.1.5)IOC控制反转和DI依赖注入
- 控制反转与依赖注入(IOC和DI)
- 控制反转IOC和依赖注入DI
- 控制反转IOC和依赖注入DI
- vue组件之emit
- UNP(卷2:进程间通信)—— 第10章:Posix信号量
- 多表查询
- Android6.0Framework源码解析系列[目录]
- 图片加载框架Glide使用教程
- IoC(控制反转)和DI(依赖注入)
- 最小表示法
- java hibernate 关联关系有什么作用
- gdb如何查看内存
- 字典树
- 使用Java程序调用Matlab
- oracle 导入导出表
- Android源码分析之Builder模式
- [设计模式](八):组合模式(Composite)与享元模式(Flyweight)详解