【问题标题】:Getting to grips with Google Guice掌握 Google Guice
【发布时间】:2010-07-16 13:16:20
【问题描述】:

我刚刚开始使用 Google Guice 作为依赖注入框架,并试图将其改进为我最近编写的一个中小型项目。我了解 Guice 如何工作的基础知识,但对一些方法细节有点模糊。例如:

1) 模块用于定义您的绑定,然后将其输入注入器。您倾向于将所有内容都放在一个模块中,还是倾向于将事物分解为许多更小的模块?

2) 您是否在顶层有一个注入器来注入整个对象树,或者多个注入器散布在其中只注入您真正需要注入的那些依赖项?我在这里考虑的是我自己的代码库,当然,它有很多依赖项,但只有一小部分我需要在测试期间控制。

3) 我对使用仅测试环境模块而不是生产版本进行系统/集成测试的最佳方式感到有点困惑。这个问题可能是特定于实现的,但我很好奇人们使用什么方法。作为参考,我的应用是一个基于 servlet 的网络应用。

还有其他指针吗?

【问题讨论】:

    标签: java guice


    【解决方案1】:

    1) 通常,您会将事物分解为多个模块。 Guice 的目标之一是帮助使代码模块化,这就是模块的用途。如何分解它取决于您(显然,您并非绝对必须这样做)。更细粒度的模块的一个优点是您可以在特定包中定义模块并使实现接口包私有的类。由于模块在包中,它可以绑定那些具体的类,它们可以用于配置Injector(在另一个包中)。此外,当您只需将一个模块更改为另一个模块即可更改某事的完成方式时,您的代码会更加灵活,而不必更改单个单体模块中的代码。

    2) 是的,顶层的一个注入器注入整个对象树是通常应该做的事情。这又回到了模块的问题上……使用它们将依赖关系分解为组并使用一个注入器。

    3) 使用不同的入口点类来配置注入器。对于一个独立的应用程序,我会有一个不同的main 类......对于一个 web 应用程序,我想你可以单独创建一个 GuiceServletContextListener 进行测试。然后你可以用模块替换整个模块进行测试,或者使用Modules.override覆盖特定模块中的绑定等。

    【讨论】:

    • 啊,我想我现在开始看到不同之处了。我偶然发现了你的另一篇文章,它揭示了我的困惑。本质上,整个代码中的多个注入器更类似于服务定位器模式,而不是依赖注入。我还有很多事情要处理,但感谢您的回答,因为它给了我一个非常好的开始。
    【解决方案2】:

    看看Dependency Injection这本书——它涵盖了Guice和Spring,所以从一个框架到另一个框架的转换非常容易。如果您已经了解 IoC 背后的原则,那绝对是一件好事。

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2021-10-09
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多