IOC(Inversion of Control)即控制反转,是在面试或平常交流中经常遇到了词汇;我也曾经仿照Spring,利用JDK的反射和动态代理实现了一个简单的IOC框架,感觉算是知其然也知其所以然了;但如果问我Spring的IOC之所以流行的原因是什么,或者说IOC的好处和核心原理是什么,还真是一下子回答不出来。
IOC作为一种设计模式,首先想到其实现了组件的解耦及代码复用。如果是初学者,在类A里调用类B的方法,一般就直接new B()写死在代码中,如果哪一天不用B了,改用C,只能在project中查询一下new B(),然后全部改成new C(),这种方式下A做任何事情都完全依赖于B或C,A每每都需要亲自动手去实现或者引用具体的实现类,A和B、C是紧耦合的,代码维护也很辛苦;而IOC就是把这种“实现类”的关系控制在自己手中,称为反转,而只需要给A提供一个接口IB(A不需要依赖B或C了),该接口定义了类的行为规范(即“实现类”需要能做这个也能做那个,但具体怎么做或者弄虚作假,是不管的),IOC就负责在运行时完成动态的注入过程(类的实例化及接口对实例的引用),所以IOC也称为DI(Dependecy Injection 依赖注入),这种说法更形象些;而这种面向接口的编程方式和设计模式是密不可分的。
如何注入,具体注入哪个实现类的实例,一般都是在配置文件里指明,这个文件就是IOC的一个说明书,实现了资源的集中配置及管理。
最后,不得不提一下“关注点分离”(Separation of Concerns : SOC),这是解决复杂问题常用的一种思维方法,将一个大的复杂问题分解为小而简单问题,关注不同的侧重点(模块、服务),最后形成最终解决方案,这是提高生产效率的有效方式。而IOC正是这样的一种思维方式,就比如实现A,并不用关心如何实现B;AOP也是基于IOC的一种应用,编码时只需要关注某项服务的实现,所有的组合,在运行时由IOC注入即可(before,after,around)。
综上,解耦、资源集中、关注分离,应该就是IOC的核心思想了。
相关推荐
JAVA设计模式之IOC实战02
JAVA设计模式之IOC实战01
使用spring框架,工厂模式的IoC应用,非常简单的小例子。
Spring_IOC_AOP总结,有代码详细讲解了springIOC和AOP的功能,是你学习三大框架的必备
IOC模式 c#经典例子 IOC 例子 IOC模式 c#经典例子 IOC 例子 IOC模式 c#经典例子 IOC 例子
Spring IOC设计原理解析.docx
IoC 依赖注入 技术总结 IoC 依赖注入 技术总结
IoC 容器和Dependency Injection 模式
工厂模式几种类型的测试,并有spring ioc 的简单实现!
Android 设计模式 示例集合 以及IOC注解事例 Demo
Control,IoC)。在本文中,我将深入探索这个模式的工作原理,给它一个更能描述其特点的名 字——“依赖注入”(Dependency Injection),并将其与“服务定位器”(Service Locator) 模式作一个比较。不过,这两者...
利用Java的反射与代理实现IOC模式 在Java中,其反射和动态代理机制极其强大,我们可以通过其反 射机制在运行时获取信息。而代理是一种基本的设计模式,它是一种为了提供额外的或不同...下 面,让我们开始IOC之旅吧!
NULL 博文链接:https://lingyunlujixin.iteye.com/blog/296644
IOC详解IOC详解IOC详解IOC详解IOC详解IOC详解IOC详解IOC详解
依赖注入:获得依赖对象的过程由自身管理变为了由IOC容器主动注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。 AOP最多听到的就是面向切面编程,那对于这个名词,我第一次听到的时候也是不能...
Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程.doc
Java的反射与代理实现IOC模式,供大家一起参考学习。
智慧城市运营中心IOC设计方案.pdf
Java Spring相关设计思想解析IOC DI DL DP