快速业务通道

通过Guice进行依赖项注入 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
ice 提供了一个选项。可以使用绑定程序配置它们,或者直接注释依 赖项,如清单 20 所示:

清单 20. 改用注释选择作用域

@Singleton public class HeavyWaterRefinery implements FuelSource {...}

Guice 提供了超出范围的 Singleton 作用域,但它允许您定义自己的作用域(如果您愿 意)。例如,Guice servlet 包提供了两个其他作用域:Request 和 Session,它们为 servlet 请求和 servlet 会话提供类的一个独特实例。

常量绑定和模块配置

HeavyWaterRefinery 需要一个许可密钥才能启动。Guice 可以绑定常量值和新实例。请 查看清单 21:

清单 21. 在模块中绑定常量值

public class HeavyWaterRefinery implements FuelSource {   @Inject   public HeavyWaterRefinery(@Named("LicenseKey") String key) {...} } // in HeroModule: binder.bind(String.class)   .annotatedWith(Names.named("LicenseKey")).toInstance("QWERTY");

这里有必要使用绑定注释,否则 Guice 将不能区分不同的 String。

注意,尽管前面不推荐使用,我还是选择使用 @Named 注释。因为我想显示清单 22 所示 的代码:

清单 22. 使用属性文件配置模块

//In HeroModule: private void loadProperties(Binder binder) {   InputStream stream =    HeroModule.class.getResourceAsStream("/app.properties");   Properties appProperties = new Properties();   try {    appProperties.load(stream);    Names.bindProperties(binder, appProperties);   } catch (IOException e) {    // This is the preferred way to tell Guice something went wrong    binder.addError(e);   } } //In the file app.properties: LicenseKey=QWERTY1234

这段代码使用 Guice Names.bindProperties 实用函数,通过恰当的 @Named 注释将 app.properties 文件中的每个属性与一个常量绑定。这本身就很好,而且还显示了您可以使 模块代码更复杂。如果喜欢,可以从数据库或 XML 文件加载绑定信息。模块是纯 Java 代码 ,这提供了很大的 灵活性。

通过Guice进行依赖项注入(7)

时间:2011-04-09 IBM Nicholas Lesiecki

结束语

Guice 主要概念小结:

使用 @Inject 请求依赖项。

将依赖项与 Module 中的实现绑定。

使用 Injector 引导应用程序。

使用 @Provides 方法增加灵活性。

需要了解的 Guice 知识还很多,但您应该先掌握这篇文章中讨论的内容。我建议下载它 ,以及本文的 示例代码。当然,您也可以创建自己的示例应用程序,这就更好了。通过示例 深入了解概念但又不用考虑生产代码是很有意思的。如果要了解更多 Guice 高级功能(比如 面向方面编程支持),建议您访问 参考资料 中的一些链接。

说到生产代码,DI 的一个缺点是它可能感染病毒。注入一个类后,它会导致注入下一个 类,依此类推。不过这很好,因为 DI 使代码更好。另一方面,这需要大量重构现有代码。 为了使工作易于管理,可以将 Guice Injector 存储在某处并直接调用它。应该将这当作一 根临时需要的拐杖,但最后一定可以摆脱它。

Guice 2.0 即将推出。有一些功能我还没有讨论,它可以使模块的配置更简单,而且能支 持更大、更复杂的配置方案。可以访问 参考资料 中的链接了解即将面世的功能。

我希望您会考虑将 Guice 添加到工具包中。根据我的经验,DI 对于实现灵活的可测试代 码库特别有用。Guice 使 DI 变得简单而有趣。还有什么比容易编写的、灵活的、可测试的 代码更好呢?

来源:http://www.ibm.com/developerworks/cn/java/j-guice.html

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号