快速业务通道

用Guice写Java - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
一个缺省的实现。

@ImplementedBy(ServiceImpl.class) public interface Service {   void go(); }

这时,如果客户需要一个 Service 对象,且 Guice 无法找到显式绑定,Guice 就会 注入一个 ServiceImpl 的实例。

缺省情况下,Guice 每次都注入一个新的实例。如果你想指定不同的作用域规则,你 也可以对实现类进行标注。

@Singleton public class ServiceImpl implements Service {   public void go() {    ...   } }

用Guice写Java(4)

时间:2011-04-02 王咏刚

架构概览

我们可以将 Guice 的架构分成两个不同的阶段:启动和运行。你在启动时创建一个注 入器 Injector,在运行时用它来注入对象。

启动

你通过实现 Module 来配置 Guice。你传给 Guice 一个模块对象,Guice 则将一个绑 定器 Binder 对象传入你的模块,然后,你的模块使用绑定器来配置绑定。一个绑定通常 包含一个从接口到具体实现的映射。例如:

public class MyModule implements Module {   public void configure(Binder binder) {    // Bind Foo to FooImpl. Guice will create a new    // instance of FooImpl for every injection.    binder.bind(Foo.class).to(FooImpl.class);    // Bind Bar to an instance of Bar.    Bar bar = new Bar();    binder.bind(Bar.class).toInstance(bar);   } }

在这个阶段,Guice 会察看你告诉它的所有类,以及任何与这些类有关系的类,然后 通知你是否有依赖关系的缺失。例如,在一个Struts 2 应用中,Guice 知道你所有的动 作类。Guice 会检查你的动作类以及它们依赖的所有类,如果有问题会及早报错。

创建一个 Injector 涉及以下步骤:

用Guice写Java - 编程入门网

首先创建你的模块类实例,并将其传入 Guice.createInjector().

Guice 创建一个绑定器 Binder 并将其传入你的模块。

你的模块使用绑定器来定义绑定。

基于你所定义的绑定,Guice 创建一个注入器 Injector 并将其返回给你。

你使用注入器来注入对象。

用Guice写Java(5)

时间:2011-04-02 王咏刚

运行

现在你可以使用第一阶段创建的注入器来注入对象并内省(introspect)我们的绑定 了。Guice 的运行时模型由一个可管理一定数量绑定的注入器组成。

用Guice写Java - 编程入门网

键 Key 唯一地确定每一个绑定。Key 包含了客户代码所依赖的类型以及一个可选的标 注。你可以使用标注来区分指向同一类型的多个绑定。Key 的类型和标注对应于注入时的 类型和标注。

每个绑定有一个提供者 provider,它提供所需类型的实例。你可以提供一个类, Guice 会帮你创建它的实例。你也可以给 Guice 一个你要绑定的类的实例。你还可以实 现你自己的 provider,Guice 可以向其中注入依赖关系。

每个绑定还有一个可选的作用域。缺省情况下绑定没有作用域,Guice 为每一次注入 创建一个新的对象。一个定制的作用域可以使你控制 Guice 是否创建新对象。例如,你 可以为每一个 HttpSession 创建一个实例。

自举(Bootstrapping)你的应用

自举(bootstrapping)对于依赖注入非常重要。总是显式地向 Injector 索要依赖, 这就将 Guice 用作了服务定位器,而不是一个依赖注入框架。

你的代码应该尽量少地和 Injector 直接打交道。相反,你应该通过注入一个根对象 来自举你的应用。容器可以更进一步地将依赖注入根对象所依赖的对象,并如此迭代下去 。最终,在理想情况下,你的应用中应该只有一个类知道Injector,每个其他类都应该使 用注入的依赖关系。

例如,一个诸如 Struts 2 的Web 应用框架通过注入你的所有动作类来自举你的应用 。你可以通过注入你的服务实现类来自举一个 Web 服务框架。

依赖注入是传染性的。如果你重构一个有大量静态方法的已有代码,你可能会觉得你 正在

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号