通过Guice进行依赖项注入 - 编程入门网
象 — 不管是不是由 Guice 创建的。您还可以将字段标记为 final。
字段注入 会影响可测试性,特别是将字段标记为 private 时。这破坏了使用 DI 的主要 目的。应该尽量少使用字段注入。 方法注入 在您不控制类的实例化时很有用。如果您有一个需要某些依赖项的超类,也可 以使用方法注入(构造函数注入会使这种情况变得很复杂)。 选择实现 现在,假设应用程序中有多个 Vehicle。一样英勇的 Weasel Girl 无法驾驭 FrogMobile !同时,您不想在 WeaselCopter 上硬编码依赖项。清单 11 显示了 Weasel Girl 请求一种 更快的传输模式: 清单 11. 使用注释请求某种特定的实现
在清单 12 中,HeroModule 使用绑定函数告诉 Guice WeaselCopter 是 “很快” 的: 清单 12. 告诉 Guice Module 中的相关注释
注意,我选择了一个注释,描述我想以抽象形式描述的工具种类(@Fast),而不是与实 现太接近的注释(@WeaselCopter)。如果您使用的注释将想要的实现描述得太精确,就让读 者觉得创建一个隐式依赖项。如果使用 @WeaselCopter,而且 Weasel Girl 借用了 Wombat Rocket,就会对程序员阅读和调试代码造成混淆。 要创建 @Fast 注释,需要复制清单 13 中的模板: 清单 13. 复制粘贴这段代码以创建一个绑定注释
如果您编写了大量 BindingAnnotations,就会得到许多这样的小文件,每个文件只是注 释名称不同。如果您觉得这很繁琐,或者需要执行快速的原型设计,可以考虑 Guice 的内置 @Named 注释,它接受一个字符串属性。清单 14 展示了这种替代方法: 清单 14. 使用 @Named 代替自定义注释
这种方法是可行的,但由于名称只在字符串内有效,所以这不能利用编译时检查和自动补 齐。总的来说,我更愿意自己编写注释。 如果您根本不想使用注释,怎么办?即使添加 @Fast 或 @Named("Fast") 都会使类在某 种程度上影响配置本身。如果想知道如何解决这个问题,请接着阅读。 通过Guice进行依赖项注入(5)时间:2011-04-09 IBM Nicholas Lesieckiprovider 方法 如果每次探险都派遣 Frog Man,您可能会厌烦。您喜欢在每个场景中出现的 hero 是随 机的。但是,Guice 的默认绑定程序 API 不允许出现 “每次调用时将 Hero 类绑定到一个 不同的实现” 这样的调用。不过,您可以 告诉 Guice 使用一种特殊的方法来创建每个新的 Hero。清单 15 显示了将一个新方法添加到 HeroModule 中,并用特殊的 @Provides 注释进 行注释: 清单 15. 使用 provider 编写自定义创建逻辑
Guice 会自动发现具有 @Provides 注释的 Module 中的所有方法。根据 Hero 的返回类 型,在您请求某个 hero 时,Guice 会进行计算,它应该调用 provider 方法 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |