快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
Injector 开始的示例 main 程序:

清单 7 使用 Injector 启动应用程序

public class Adventure {   public static void main(String[] args){    Injector injector = Guice.createInjector(new HeroModule());    FrogMan hero = injector.getInstance(FrogMan.class);    hero.fightCrime();   } }

为了获取注入器,需要在 Guice 类上调用 createInjector。向 createInjector 传递一 个模块列表,用于配置它本身(本例只有一个,但您可以添加一个配置 evildoer 的 VillainModule)。拥有注入器后,使用 getInstance 向它请求对象,传递您想返回的 .class(细心的读者会注意到您不需要告诉 Guice 有关 FrogMan 的信息。如果您请求一个 具体类,而它有一个 @Inject 构造函数或公共非参数构造函数的话,Guice 就会创建这个类 ,而无需调用 bind)。

这是 Guice 构造对象的第一种方式:显式询问。但是,您不会希望在启动例程之外使用 这个操作。更好、更简单的方式是让 Guice 注入依赖项、依赖项的依赖项,依此类推(正如 谚语所说:“背起地球的海龟站在另一个海龟的背上”;请参阅 参考资料)。最初看来,这 似乎比较麻烦,但您很快就会习惯这种用法。例如,清单 8 显示了一个注入了 FuelSource 的 FrogMobile:

清单 8. FrogMobile 接受一个 FuelSource

@Inject public FrogMobile(FuelSource fuelSource){   this.fuelSource = fuelSource; }

这意味着,当您检索 FrogMan 时,Guice 会构建一个 FuelSource、一个 FrogMobile, 最后是一个 FrogMan。即使应用程序与注入器只交互一次,也是如此。

当然,您并不总是有机会控制应用程序的 main 例程。例如,许多 Web 框架自动构建 “ 操作”、“模板” 或其他一些初始服务。总是可以找到一个地方插入 Guice,不管是使用该 框架的一个插件,还是使用一些自己手动编写的代码(例如,Guice 项目发布了一个 Struts 2 插件,它允许 Guice 配置您的 Strut 操作;请参阅 参考资料)。

其他注入形式

到目前为止,我展示了 @Inject 应用于构造函数的用法。当 Guice 找到注释时,它会挑 选构造函数参数,并试图为每个参数找到一个配置绑定。这称为 构造函数注入。根据 Guice 的最佳实践指南,构造函数注入是询问依赖项的首选方式。但这不是唯一的方式。清单 9 显 示了配置 FrogMan 类的另一种方式:

清单 9. 方法注入

public class FrogMan{   private Vehicle vehicle;   @Inject   public void setVehicle(Vehicle vehicle) {    this.vehicle = vehicle;   } //etc. ...

注意,我没有使用注入的构造函数,而是改用一个带有 @Inject 标记的方法。Guice 会 在构造好 hero 之后立即调用此方法。Spring 框架的忠实用户可以将此方法视为 “setter 注入”。不过,Guice 只关心 @Inject;您可以任意命名这个方法,它可以带有多个参数。 此方法可以是包保护的,也可以是私有方法。

如果您认为 Guice 访问私有方法不是很好,可以参见清单 10,其中 FrogMan 使用了字 段注入:

清单 10. 字段注入

public class FrogMan {   @Inject private Vehicle vehicle;   public FrogMan(){} //etc. ...

同样,所有 Guice 都只关心 @Inject 注释。字段注入查找注释的所有字段并试图注入相 应的依赖项。

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

时间:2011-04-09 IBM Nicholas Lesiecki

哪种方法最好

三个 FrogMan 版本都展示了相同的行为:Guice 在构建时注入相应的 Vehicle。不过, 像 Guice 的作者一样,我更喜欢构造函数注入。下面简单分析这三种方式:

构造函数注入 很简单。因为 Java 技术能保证构造函数调用,您不用担心出现未初始化 的对

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