1.IoC
控制反转(Inversion of Control)是一种是面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度。其基本思想是:借助于“第三方”实现具有依赖关系的对象之间的解耦。
由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。
具体来看看:
第一幅图来说:objA依赖于ObjB,所以当ObjA初始化或运行到某个点需要创建ObjB或者使用已经创建好的ObjB,主动权都是在自己手里的。
第二幅图:系统在引入了IoC容器后,objA和ObjB以及其他对象失去了直接联系,当ObjA运行到需要objB时,IoC容器会主动创建一个ObjB注入到obj需要的地方。
分析来看,objA获得依赖的过程由主动变成了被动,这就是控制反转。
依赖注入就是将实例变量传入到一个对象中去(Dependency injection means giving an object its instance variables)。
1.非自己主动初始化依赖,而通过外部来传入依赖的方式
2.解耦,将依赖之间解耦。
3.因为已经解耦,所以方便做单元测试,尤其是 Mock 测试。
控制反转是一种思想;
依赖注入是一种设计模式
IoC框架使用依赖注入作为实现控制反转的方式,但是控制反转还有其他的实现方式,例如说ServiceLocator,所以不能将控制反转和依赖注入等同