spring框架的IoC设计思想
2016-02-01 15:47
246 查看
Spring Framework中目前最引人注目的,也就是名为控制反转(IOC =Inverse Of Control)或者依赖注入(DI =Dependence Injection)的设计思想.
IoC,用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
正在业界为 IoC 争吵不休时, 大师级人物 Martin Fowler 也站出来发话, 以一篇经典文章 《Inversion ofControl Containers and the Dependency Injection pattern》为 IoC 正名,至此,IoC 又获得了一个新的名字: “依赖注入 (Dependency Injection) ” 。
相对 IoC 而言, “依赖注入”的确更加准确的描述了这种古老而又时兴的设计理念。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。
为什么称之为“古老而又时兴”的设计理念?至于“时兴”自然不必多费唇舌,看看国内外大小论坛上当红的讨论主题便知。至于“古老”……,相信大家对下面图片中的设备不会陌生:
想必大家在日常工作中也有类似的一套行头。
这与依赖注入有什么关系?图中三个设备都有一个共同点,都支持 USB 接口。当我们需要将数据复制到外围存储设备时,可以根据情况,选择是保存在 U 盘还是 USB 硬盘,下面的操作大家也都轻车熟路,无非接通 USB 接口,然后在资源浏览器中将选定的文件拖放到指定的盘符。
这样的操作在过去几年中每天都在我们身边发生,而这也正是所谓依赖注入的一个典型案例,上面称之为“古老”想必也不为过分。
再看上例中,笔记本电脑与外围存储设备通过预先指定的一个接口(USB)相连,对于笔记本而言,只是将用户指定的数据发送到 USB 接口, 而这些数据何去何从,则由当前接入的 USB 设备决定。在 USB设备加载之前,笔记本不可能预料用户将在 USB 接口上接入何种设备,只有 USB 设备接入之后,这种设备之间的依赖关系才开始形成。
对应上面关于依赖注入机制的描述,在运行时(系统开机,USB设备加载)由容器(运行在笔记本中的 Windows 操作系统)将依赖关系(笔记本依赖 USB 设备进行数据存取)注入到组件中(Windows文件访问组件)。
这就是依赖注入模式在现实世界中的一个版本。
IoC,用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
正在业界为 IoC 争吵不休时, 大师级人物 Martin Fowler 也站出来发话, 以一篇经典文章 《Inversion ofControl Containers and the Dependency Injection pattern》为 IoC 正名,至此,IoC 又获得了一个新的名字: “依赖注入 (Dependency Injection) ” 。
相对 IoC 而言, “依赖注入”的确更加准确的描述了这种古老而又时兴的设计理念。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。
为什么称之为“古老而又时兴”的设计理念?至于“时兴”自然不必多费唇舌,看看国内外大小论坛上当红的讨论主题便知。至于“古老”……,相信大家对下面图片中的设备不会陌生:
想必大家在日常工作中也有类似的一套行头。
这与依赖注入有什么关系?图中三个设备都有一个共同点,都支持 USB 接口。当我们需要将数据复制到外围存储设备时,可以根据情况,选择是保存在 U 盘还是 USB 硬盘,下面的操作大家也都轻车熟路,无非接通 USB 接口,然后在资源浏览器中将选定的文件拖放到指定的盘符。
这样的操作在过去几年中每天都在我们身边发生,而这也正是所谓依赖注入的一个典型案例,上面称之为“古老”想必也不为过分。
再看上例中,笔记本电脑与外围存储设备通过预先指定的一个接口(USB)相连,对于笔记本而言,只是将用户指定的数据发送到 USB 接口, 而这些数据何去何从,则由当前接入的 USB 设备决定。在 USB设备加载之前,笔记本不可能预料用户将在 USB 接口上接入何种设备,只有 USB 设备接入之后,这种设备之间的依赖关系才开始形成。
对应上面关于依赖注入机制的描述,在运行时(系统开机,USB设备加载)由容器(运行在笔记本中的 Windows 操作系统)将依赖关系(笔记本依赖 USB 设备进行数据存取)注入到组件中(Windows文件访问组件)。
这就是依赖注入模式在现实世界中的一个版本。
相关文章推荐
- java对象克隆简单实现(可多级克隆)
- Java环境变量配置
- 本地方法(JNI)——数值参数与返回值
- 2016蓝桥杯假期任务之《矩形运算》
- java实现简单的搜索引擎
- Java 多线程
- Java IO/NIO
- Java — 记事本1.0(Java IO 的练习) & 将Javacode -> .exe文件
- java中的匿名内部类总结
- 【转】 Ubuntu11.10 下安装 jdk
- 在spring的bean中注入内部类
- Java的数据类型
- spring MVC之构造ModelAndView对象
- spring mvc json中文乱码
- JAVA-字符串
- JAVA-数组
- java中ResultSet遍历数据
- Spring定时调度器应用
- Java:单例模式的七种写法
- java版,实现人民币的大小写转换