Spring -- IOC理论
2015-07-15 17:35
519 查看
控制反转(IOC)
IOC(inversion of control)是spring的核心,就是由spring来控制对象的周期和对象间的关系。传统开发模式:对象间相互依赖,比如A对象中引入B对象,要使用new B();
IOC开发模式:将对象之间的依赖关系交给IOC容器来做。
先看下图,我们来了解应该如何来完成一套好的架构
这张图是多个此轮之间相互协作,来完成一项任务。
图一,我们可以看出齿轮与齿轮之间相互依赖,彼此互相耦合,少了哪一个此轮,都会影响正常的工作,这个就类似与我们的传统开发模式
图二,通过IOC容器这个齿轮,带动4个此轮运转,4个此轮之间的依赖关系,完全由中间的大齿轮决定。
图三,去掉了大齿轮,我们可以注意到4个齿轮之间无任何的耦合性,这个状态对于我们软件开发来说,是一个非常理想的状态。
由于齿轮间没有耦合,彼此就完成自己的那部分工作就可以,在我们软件开发中这样是非常重要的,一个大的团队,团队中每个成员不用关心别的成员代码的开发进度,只要将自己的这部分代码完成即可,大大的提高了团队的开发效率。
依赖注入(DI)
其实它是控制反转的另一个名字,只是从不同的角度来进行了说明。所谓的依赖注入,就是由IOC容器在运行期间,动态的将某种依赖关系注入到对象中,所以依赖注入(DI)和控制反转(IOC)是从不同角度来描述同一件事情,通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
这里我们可以举一个例子,电脑和U盘之间的关系,电脑与U盘完全是两个单独的对象,他们之间是完全解耦的,当我把U盘插到电脑上的时候,电脑就从U盘读取数据,当我把另一块U盘插在电脑上的时候,它就从另一块电脑上读取数据,在这中间我就起到了一个IOC容器的作用,我来建立哪个电脑和哪个U盘之间的关系。
IOC的好处
看到这里,我想大家自己也能总结出来有哪些好处了。降低了组件之间的耦合度(见上面图二)
提高了开发效率和产品质量(由于降低了耦合度,不用担心其他模块对你的而影响)
统一标准,提高模块的复用性(模块完全是独立的,谁想用就可以直接用)
模块具有热插拔效果(通IOC配置文件,可以决定对象之间的依赖关系)
总结
IOC理解:IOC控制反转:创建对象实例的控制权由代码控制剥离到IOC容器控制,也就是xml文件控制,侧重于原理。
DI依赖注入:创建对象实例时,为这个对象注入属性值或其他对象实例,侧重于实现。
相关文章推荐
- How-to: resolve "java.lang.NoClassDefFoundError: org/htrace/Trace" when hbase Export
- springmvc DispatcherServlet初始化..信息..
- 堆(heap)
- Java学习------基本数据类型转换
- 001--jdk环境配置
- OpenJWeb3.1 Java Web应用快速开发平台全部开源公告
- java timer类
- eclipse 注释模板设置详解
- JAVA环境安装配置
- struts2 通配符的配置方式
- Java中的重载、重写、多态,静态绑定、动态绑定
- eclipse 添加注释简介
- java-泛型返回值的方法类型
- java Runtime.exec() 执行问题
- java web每天定时执行任务
- java 命令参数知识
- java的线程通信
- JAVA常用类总结
- 解决Struts中文乱码问题总结
- MyEclipse快捷键大全