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的核心思想了。

参考:http://www.zhihu.com/question/23277575

http://www.nowamagic.net/librarys/veda/detail/393

何谓IOC的核心思想的更多相关文章

  1. spring核心思想:IOC(控制反转)和DI(依赖注入)

    Spring有三大核心思想,分别是控制反转(IOC,Inversion Of Controller),依赖注入(DI,Dependency Injection)和面向切面编程(AOP,Aspect O ...

  2. Spring 框架基础(03):核心思想 IOC 说明,案例演示

    本文源码:GitHub·点这里 || GitEE·点这里 一.IOC控制反转 1.IOC容器思想 Java系统中对象耦合关系十分复杂,系统的各模块之间依赖,微服务模块之间的相互调用请求,都是这个道理. ...

  3. Spring的三大核心思想:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)

    Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧) 1.IoC是什么?    IoC(Inversion of Control)控制反转,IoC是一种新的Java编程模式,目前很多 ...

  4. Spring核心思想:IOC(控制反转)、DI(依赖注入)和AOP(面向切面编程)

    Spring有三大核心思想,分别是控制反转(IOC,Inversion Of Controller),依赖注入(DI,Dependency Injection)和面向切面编程(AOP,Aspect O ...

  5. Spring核心思想Ioc和Aop (面试)

    Spring核心思想Ioc和Aop (面试) 注意: Ioc和Aop并不是Spring提出的,在Spring之前就已经存在,Spring只是在技术层面给这两个思想做了非常好的实现. 1 Ioc 1.1 ...

  6. Spring的核心思想,总结得非常好!

    依赖注入是面型接口编程的一种体现,是Spring的核心思想.事实上依赖注入并不是什么高深的技术, 只是被Sping这么以包装就显得有些神秘. 如上代码清单所示,Coder使用Java语言打印hello ...

  7. Spring核心结构及核心思想

    Spring核心结构 基本概念 Spring是⼀个分层⾮常清晰并且依赖关系.职责定位⾮常明确的轻量级框架,主要包括⼏个⼤模块:数据处理模块.Web模块.AOP(Aspect Oriented Prog ...

  8. IoC/DI基本思想的演变

    ---------------------------------------------------------------------------------- (1)IoC/DI的概念 IoC ...

  9. 《深入理解Spark:核心思想与源码分析》——SparkContext的初始化(叔篇)——TaskScheduler的启动

    <深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析> ...

随机推荐

  1. iOS开发——语法篇OC篇&高级语法精讲二

    Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和 ...

  2. MYSQL查询今天昨天本周本月等的数据

    mysql查询本季度 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT *FROM表名WHERE TO_DAYS ...

  3. liunx 文件相关

    一.linux中 文件属性以 l.b.c.d.开头的都是什么文件? lrwxrwxrwx 1 root root 11 Aug 20 08:38 core -> /proc/kcoredrwxr ...

  4. True Zero Downtime HAProxy Reloads--转载

    原文地址:http://engineeringblog.yelp.com/2015/04/true-zero-downtime-haproxy-reloads.html HAProxy: Corner ...

  5. win7 debian 双系统修改引导项顺序

    转载:http://jingyan.baidu.com/article/72ee561aa1d123e16138df81.html 问题描述: 个人在宿舍使用的比较多的是Window 7,而它的启动项 ...

  6. selenium python 环境搭建(64位 windows)

    之前写了同样的文章,可是后来自己按照给文章再次搭建环境当搭建环境成功后却发现还是无法用.使用from selenium import webdriver,在run的时候却出现ImportError: ...

  7. cocos2d-x混合BlendFunc的使用

    1.什么是混合模式 “混合”是指两种颜色的叠加方式.在新图片将要渲染画到屏幕上的时候,将用在新图片中的红.绿.蓝和透明度信息,与屏幕上已经存在的图片颜色信息相融合. 说的具体一点,就是把某一像素位置上 ...

  8. Android(java)学习笔记97:Scanner类使用

    package cn.itcast_01; /* * Scanner:用于接收键盘录入数据. * * 前面的时候: * A:导包 * B:创建对象 * C:调用方法 * * System类下有一个静态 ...

  9. [未完成][Mooc]关于Linxu的总结(一)

    视频1:Linux之前有个Minix(这个是一个教授用来教学用的)开源的,不是编译过的,不能通过QQ.exe找到其源码.后来Linus这个家伙搞了一个Linux.服务器领域超过百分之八十.linux是 ...

  10. GDB调试器简介

     Linux系统中包含了GNU 调试程序gdb,它是一个用来调试C和 C++ 程序的调试器.可以使程序开发者在程序运行时观察程序的内部结构和内存的使用情况. GDB提供了一下一些功能: (1)监视程序 ...