Spring 学习日记(2009/10/06) - 控制反转和依赖植入

[b]Spring 学习日记(2009/10/06) - 控制反转和依赖植入[/b]

实现控制反转(Inversion of Control, IoC)和依赖植入(Dependency Injection)的目的在于提供一个简单的机制来实现系统依赖资源的获取和生命周期管理.

一般而言,控制反转有两种基本形式, 依赖植入(Dependency Injection)和依赖查找(Dependency Lookup). 基于这两种不同的形式, 又有其各自不同的具体实现. 就概念而言, 依赖植入是控制反转的一个子集. 因此,一个依赖植入的实现肯定是IoC的实现, 但一个IoC的实现不一定是基于依赖植入的.


依赖植入和依赖查找分别代表了IoC的新旧两种设计思路. 依赖查找体现了传统的依赖获取方法,并已广为Java开发人员使用. 而依赖植入则体现了新的,更灵活,更有效的方法. 这两种方法的根本区别在于, 使用依赖查找,当一个组件需要使用某个依赖资源时, 组件需要主动获取依赖资源的实例, 而使用依赖植入,依赖资源是由IoC容器动态地植入目标组件之中.

[color=brown]依赖查找的两种基本形式[/color]

依赖查找的基本形式包括资源拉取(Dependency Pull)和 上下文资源查找(Contextualized Dependency Lookup, CDL).
资源拉取是Java开发人员最常用的一种IoC形式,并在EJB, JNDI应用中广为使用. 资源拉取的基本形式可参见以下代码.


public static void main(final String[] args) {

final Container container = getContainer();

final MyResource resource = (MyResource) container.getBean("resourceName");

resource.doSomething();

}




CDL通过一个回调接口方法来实现依赖资源. 使用CDL,目标组件首先向IoC容器发出资源查找请求,IoC容器随后调用目标组件的回调接口来传入IoC容器对象, 而目标组件则通过该IoC容器对象来进行依赖资源查找. 示例代码如下.



public interface ManagedComponent {

public void performLookup(Container container);

}


public class ContextualizedDependencyLookup implements ManagedComponent {

private Dependency dep;

public void performLookup(Container container) {

this.dep = (Dependency) container.getDependency("myDependency");

}

}



[color=brown]依赖植入的两种基本形式[/color]


依赖植入的基本形式包括构造函数植入和设置函数植入两种. 使用构造函数植入,依赖资源的植入是当目标对象实例化时,由Ioc容器向目标对象传递构造函数参数进行的. 而使用设置函数植入时,目标对象中的每个依赖资源都需要一个符合JavaBean命名规范的设置(setter)函数. Ioc容器通过调用相关的设置函数来植入依赖资源. 就具体实现而言, 设置函数的植入是最简单的, 也是广为使用的一种依赖入机制.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值