您的位置:首页 > 编程语言 > Java开发

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文件访问组件)。

这就是依赖注入模式在现实世界中的一个版本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: