通过Guice进行依赖项注入 - 编程入门网
来提供 hero。 您可以为 provider 方法添加逻辑以构建对象并在缓存中查询它,或者通过其他方式获得它 。provider 方法是将其他库集成到 Guice 模块中的很好方式。它们也是从 Guice 2.0 开始 提供的新方法(Guice 1.0 中只编写自定义 provider 类,这比较乏味,而且更加繁琐。如 果您已经决定使用 Guice 1.0,用户指南中有这种旧方法的文档,而且在本文随附的 示例代 码 中,您可以找到一个自定义 provider)。
在清单 15 中,Guice 自动使用正确的参数注入 provider 方法。这意味着 Guice 将从 它的绑定列表中找到 WeaselGirl 和 FrogMan,您无需在 provider 方法中手动构建它们。 这演示了 “海龟背地球” 原则(海龟背地球,哪海龟下面是什么呢?是由另一只海龟背着 ,如此反复)。您依靠 Guice 来提供依赖项,即使是配置 Guice 模块本身。 请求一个 Provider 而不是一个依赖项 假设一个故事(Saga)中要有多个 hero。如果要求 Guice 注入一个 Hero,只会得到一 个 hero。但如果您请求一个 “hero provider”,就可以根据需要创建任意多的 hero,如 清单 17 所示: 清单 17. 注入 provider 来控制实例化
提供者也可以推迟英雄的出场时间,直到传奇真正开始。如果英雄依赖于时间敏感或上下 文敏感的数据,这就会很方便。 Provider 接口有一个方法:get<T>。要访问提供的对象,调用这个方法即可。每 次有没有获取新对象以及对象如何配置取决于 Guice 是如何配置的(参阅下面的 作用域 部 分,了解单实例对象和其他长生命周期对象的详细信息)。在本例中,Guice 使用 @Provides 方法,因为它是构建新 Hero 的注册方式。这意味着该传奇应该由任意三位英雄 混合而成。 不要把提供者与 provider 方法弄混淆了(在 Guice 1.0,这两者更难区分开来)。尽管 该 Saga 是从自定义 @Provides 方法中获得它的英雄,但您可以请求任意 Guice 实例化依 赖项的一个 Provider。如果需要,可以根据清单 18 重新编写 FrogMan 的构造函数: 清单 18. 请求 Provider 而不是依赖项
(注意您完全不用更改这个模块代码)。重新编写没有任何作用;只是说明您总是可以请 求 Provider,而不用直接请求依赖项。 通过Guice进行依赖项注入(6)时间:2011-04-09 IBM Nicholas Lesiecki作用域 默认情况下,Guice 为每个请求的依赖项创建一个新实例。如果对象是轻量级的,这个策 略可以很好地工作。但是,如果有一个创建开销很大的依赖项,就可能需要在几台客户机之 间共享实例。在清单 19 中,HeroModule 将 HeavyWaterRefinery 作为一个单实例对象绑定 : 清单 19. 将 HeavyWaterRefinery 绑定为一个单实例对象
这意味着 Guice 会一直保持 “提炼厂” 可用,只要另一个实例需要燃料源,Guice 就 会注入相同 的 “提炼厂”。这避免了在应用程序中启动多个 “提炼厂”。 在选择作用域时,Gu |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |