读书人

[#0x002E] 依托、依赖注入以及控制反转

发布时间: 2012-10-30 16:13:36 作者: rapoo

[#0x002E] 依赖、依赖注入以及控制反转

1. 何为依赖

  不管是面向对象,还是面向过程,一个应用总会分成许多的模块,然后由这些模块协同工作完成任务。要协同工作就会产生依赖,如一个方法调用另一个方法、一个对象包含另一个对象,这些都是依赖关系。?
  比如:类A要包含对象b的话,就需要在A里B b = ?new B(),这里明显是类A依赖对象b(因为怎么看都不像是对象b依赖类A……)

?

2. 何为依赖注入

  I have to say, the translation sucks! I'd rather use 'Dependency Injection' or 'DI' instead.

?

  所谓DI,就是由容器动态的生成依赖关系,应用可以方便的获取依赖(通俗地说就是类A不用再亲自B b = new B()来获取b对象)。从外表上看,就好像是容器将生成的依赖关系注入到应用之中。

?

3. DI的3种实现方式

Interface Injection: 类A里不是用对象b,而是接口IB的实现ib,ib由外部创建并传入类A,类A不负责创建工作,如:

?就指定了调用UpperAction的setMessage("HeLLo")。

?

Constructor Injection: 与Setter Injection相对,Construction Injection就是不使用Setter,而是使用带参构造器来创建对象b。且不允许应用调用类B的Setter(可以根本不提供Setter给应用)。与Setter Injection相比,Constructor Injection创建对象b比较方便(Setter Injection要逐个域来Set),且保持了对象b的一致性,但不如Setter Injection来得灵活。


4. 控制反转

  I have to say it again, the translation sucks! I'd rather use 'IoC' instead.

?

  控制反转,IoC,Inversion of Control,实为“控制的反转”,差一个字理解就差这么远。

  IoC,用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

读书人网 >软件架构设计

热点推荐