控制反转(IoC)与依赖注入(DI)

来源:互联网 发布:诺基亚x7软件下载 编辑:程序博客网 时间:2024/06/06 09:39

控制反转(Inversion of Control)与依赖注入(Dependency Injection)

控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。

IoC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:
<1>依赖查找(Dependency Lookup):容器提供回调接口和上下文环境给组件。EJB和Apache Avalon都使用这种方式。
<2>依赖注入(Dependency Injection):组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。
后者是时下最流行的IoC类型,其又有接口注入(Interface Injection),设值注入(Setter Injection)和构造子注入(Constructor Injection)三种方式。

依赖注入之所以更流行是因为它是一种更可取的方式:让容器全权负责依赖查询,受管组件只需要暴露JavaBean的setter方法或者带参数的构造子或者接口,使容器可以在初始化时组装对象的依赖关系。其与依赖查找方式相比,主要优势为:
<1>查找定位操作与应用代码完全无关。
<2>不依赖于容器的API,可以很容易地在任何容器以外使用应用对象。
<3>不需要特殊的接口,绝大多数对象可以做到完全不必依赖容器。