依赖注入/控制反转学习笔记

最近在学习js的开发框架比如AngularJS、Meteor、Backbone等,这些框架的一个特点就是依赖注入,因为一直对这个概念云山雾罩,所以特意花时间学习了一下,把学习笔记写在这里。

------------------------------------------------------------------------

控制反转(IoC:Inversion of Control)

依赖注入(DI:Dependency Injection)

控制反转是Java一些开发框架的核心(以Spring为代表),随着对这种模式的讨论越来越热烈,一位大牛Martin Fowler写出了一篇深具影响力的文章《Inversion of Control Containers and the Dependency Injection pattern》不光深入探讨了控制反转这个模式还提出一个更贴切的称呼---依赖注入,控制反转和依赖注入其实是等价的,只不过强调的方面不同。

IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理。

DI依赖注入:说的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。


Martin的文章也有被翻译成中文版。


国内某位大牛在Martin的文章之上写的解读:


其他一些文章(目前正在看,但还没看懂)

Spring框架中IOC控制反转和DI依赖注入区别       

控制反转与依赖注入  

Object Builder Application Block(中文)


目前大概有三种依赖注入的方式:

类型1 (基于接口): 可服务的对象需要实现一个专门的接口,该接口提供了一个对象,可以从用这个对象查找依赖(其它服务)。早期的容器Excalibur使用这种模式。

类型2 (基于setter): 通过JavaBean的属性(setter方法)为可服务对象指定服务。HiveMind和Spring采用这种方式。

类型3 (基于构造函数): 通过构造函数的参数为可服务对象指定服务。PicoContainer只使用这种方式。HiveMind和Spring也使用这种方式。


你可能感兴趣的:(依赖注入/控制反转学习笔记)