一、什么是IOC,IOC的优缺点及IOC的应用
IOC,即控制反转(Inversion of Control,英文缩写为IoC),是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。
IOC的优点:实现组件之间的解耦,提高程序的灵活性和可维护性。
IOC的缺点:
1、创建对象的步骤变复杂了,不直观,当然这是对不习惯这种方式的人来说的。
2、因为使用反射来创建对象,所以在效率上会有些损耗。但相对于程序的灵活性和可维护性来说,这点损耗是微不足道的。
3、缺少IDE重构的支持,如果修改了类名,还需到XML文件中手动修改,这似乎是所有XML方式的缺憾所在。
IOC的应用:
IOC模式将耦合代码从程序中移出,放到统一的XML文件中管理。由IOC容器通过配置文件来管理对象的生命周期、依赖关系等,这样就不用重新修改并编译具体的代码,从而实现组件之间的解耦。
二、ioc有两种实现机制 ioc是什么 为什么要ioc
di就是ioc,前者叫依赖注入 dependency injection, 后者是控制反转Inverse of Control, spring的ioc是用aop的方式进行di实现的,往大了方向,模式角度讲,aop是用动态代理模式实现的。 不过你说地也对,可以把ioc认为是在解耦
三、什么是IoC控制反转
控制反转其实就是对象字段或属性赋值publicclassControl{List_data=null;//这部分就是IOC控制器给你new出来赋值,具体是ArrayList还是其他的根据配置来}
四、举例说明IOC
IoC 就是 控制反转的意思
要了解 IoC 就需要先对设计模式有些了解
呵呵 设计模式讲究的一点 就是“先接口(稳定)后实现(善变)”
稳定住稳定的部分,也就是接口,变化善变的部分,也就是实现接口的类。
举个例子吧,假如 Invoker 类包含一个字段为 ChildA a,ChildA 类包含着 CallMe() 方法
那么在Invoker内部,任何一个调用 a.CallMe() 的方法都是在直接调用(控制)着 ChildA 类。这就叫“主动控制”——调用谁的决定权在 Invoker。
因为Invoker直接依赖于ChildA类,而假如有个ChildB类提供相同的方法 CallMe(),但其方法内部实现不同,那么要换掉ChildB类的话,则需要将Invoker类的字段a的声明 ChildA 改为 ChildB...这在设计模式中是不合适的。
设计模式中的做法呢,就是把ChildA ChildB ChildC... 抽象成一个接口,即IChild,同样由Invoker调用方法CallMe()。但此时Invoker的依赖就变了...它依赖的是接口!控制由典型的 实现-实现 变成了实现-接口(或者可以 接口-接口——只需把Invoker类抽象成IInvoker接口即可)。这就叫“反转控制”——调用谁的决定权在 IChild(是啊,由它来决定到底该调用ChildA 还是 ChildB)
这就出来一个问题了,谁来作Invoker.a?是ChildA?ChildB?还是其他集成自IChild的类?这就是IoC要考虑的问题了~~
五、IOC的意思
IOC
1.Input /Output Channel [Control] 输入/输出通道[控制];
2.Input/Output Controller [Converter] 输入/输出控制器[转换器];
3.Intergovernmental Oceanographic Commission 政府间海洋学委员会(联合国UNESCO);
4.International Olympic Committee 国际奥林匹克委员会;
5.International Oceanographic Commission 国际海洋学委员会
一般指第4个