何谓IOC的核心思想
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的核心思想的更多相关文章
- spring核心思想:IOC(控制反转)和DI(依赖注入)
Spring有三大核心思想,分别是控制反转(IOC,Inversion Of Controller),依赖注入(DI,Dependency Injection)和面向切面编程(AOP,Aspect O ...
- Spring 框架基础(03):核心思想 IOC 说明,案例演示
本文源码:GitHub·点这里 || GitEE·点这里 一.IOC控制反转 1.IOC容器思想 Java系统中对象耦合关系十分复杂,系统的各模块之间依赖,微服务模块之间的相互调用请求,都是这个道理. ...
- Spring的三大核心思想:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)
Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧) 1.IoC是什么? IoC(Inversion of Control)控制反转,IoC是一种新的Java编程模式,目前很多 ...
- Spring核心思想:IOC(控制反转)、DI(依赖注入)和AOP(面向切面编程)
Spring有三大核心思想,分别是控制反转(IOC,Inversion Of Controller),依赖注入(DI,Dependency Injection)和面向切面编程(AOP,Aspect O ...
- Spring核心思想Ioc和Aop (面试)
Spring核心思想Ioc和Aop (面试) 注意: Ioc和Aop并不是Spring提出的,在Spring之前就已经存在,Spring只是在技术层面给这两个思想做了非常好的实现. 1 Ioc 1.1 ...
- Spring的核心思想,总结得非常好!
依赖注入是面型接口编程的一种体现,是Spring的核心思想.事实上依赖注入并不是什么高深的技术, 只是被Sping这么以包装就显得有些神秘. 如上代码清单所示,Coder使用Java语言打印hello ...
- Spring核心结构及核心思想
Spring核心结构 基本概念 Spring是⼀个分层⾮常清晰并且依赖关系.职责定位⾮常明确的轻量级框架,主要包括⼏个⼤模块:数据处理模块.Web模块.AOP(Aspect Oriented Prog ...
- IoC/DI基本思想的演变
---------------------------------------------------------------------------------- (1)IoC/DI的概念 IoC ...
- 《深入理解Spark:核心思想与源码分析》——SparkContext的初始化(叔篇)——TaskScheduler的启动
<深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析> ...
随机推荐
- [Angular 2] @Input & @Output Event with ref
The application is simple, to build a color picker: When click the rect box, it will check the color ...
- cc代码学习笔记1
#define #define INT32 int #define INT8 char #define CHAR char #define SSHORT signed short #define IN ...
- ireport启动闪退问题
安装好ireport之后,双击ireport.exe启动程序只是掠过启动画面便毫无反应, 后来在网上找了下解决方法,才知道只因为ireport与jdk8不兼容, 于是下载了jdk6,并在ireport ...
- Oracle数据库的导入与导出
导出 在命令行输入"exp",回车即可访问指定的数据库, 我这里需要访问远程的数据库,所以带上了IP.端口等一些参数,具体的参数详情可以输入"exp -help" ...
- debian7安装oracle11g
1,安装必须包 apt-get install gcc g++ make binutils libc6 libc6-dev libstdc++6 libstdc++5 rpm gawk alien ...
- C - Minimum Inversion Number
Description The inversion number of a given number sequence a1, a2, ..., an is the number of pairs ( ...
- CSS skills: 3) show sub-navigate items when mouse hove on nav-item
<header> <div class="am-g am-g-fixed"> <ul class="am-avg-lg-2 topbar f ...
- oracle 10g升级到11g
Linux 上Oracle RAC 10g 升级到 Oracle RAC 11g 了解如何在 Oracle Enterprise Linux 5 上逐步将 Oracle RAC 10g 第 2 版升级 ...
- 关于TreeSet倒序排列和自定义排列
本文部分转自:http://blog.csdn.net/kaituozhe345/article/details/6842945 1.TreeSet的自然排序. TreeSet存储对象的时候, 可以排 ...
- Java反转单链表(code)
主要是面试中可能会经常碰上该类似操作,尤其是稍大点公司,面试官可能并不在乎你能不能搞定该题,但是这类型题目最是能体现程序员的思维状态 ---一个迷糊头脑的程序员 怎能立志改变这个世界 /** * @a ...