最近在学习js的开发框架好比AngularJS、Meteor、Backbone等,这些框架的一个特色就是依赖注入,由于一直对这个概念云山雾罩,因此特地花时间学习了一下,把学习笔记写在这里。html
------------------------------------------------------------------------
框架
控制反转(IoC:Inversion of Control)函数
依赖注入(DI:Dependency Injection)学习
控制反转是Java一些开发框架的核心(以Spring为表明),随着对这种模式的讨论愈来愈热烈,一位大牛Martin Fowler写出了一篇深具影响力的文章《Inversion of Control Containers and the Dependency Injection pattern》不光深刻探讨了控制反转这个模式还提出一个更贴切的称呼---依赖注入,控制反转和依赖注入实际上是等价的,只不过强调的方面不一样。ui
IOC控制反转:说的是建立对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理。spa
DI依赖注入:说的是建立对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。
.net
Martin的文章也有被翻译成中文版。翻译
国内某位大牛在Martin的文章之上写的解读:unix
其余一些文章(目前正在看,但还没看懂)xml
Object Builder Application Block(中文)
目前大概有三种依赖注入的方式:
类型1 (基于接口): 可服务的对象须要实现一个专门的接口,该接口提供了一个对象,能够从用这个对象查找依赖(其它服务)。早期的容器Excalibur使用这种模式。
类型2 (基于setter): 经过JavaBean的属性(setter方法)为可服务对象指定服务。HiveMind和Spring采用这种方式。
类型3 (基于构造函数): 经过构造函数的参数为可服务对象指定服务。PicoContainer只使用这种方式。HiveMind和Spring也使用这种方式。