代码之家  ›  专栏  ›  技术社区  ›  Chris Knight

与Google Guice打交道

  •  10
  • Chris Knight  · 技术社区  · 15 年前

    我刚开始把google guice作为一个依赖注入框架,并试图将其改造成我最近写的一个中小型项目。我了解Guice如何工作的基本知识,但在某些方法细节上有点含糊不清。例如:

    1)模块用于定义绑定,然后将绑定送入喷油器。你倾向于把所有的东西都放在一个模块里,还是倾向于把它们分解成许多更小的模块?

    2)您是否在顶层有一个注入器,用于注入整个对象树,或者有多个注入器,这些注入器仅用于注入您真正需要注入的依赖项?我在这里想我自己的代码库,当然,它有许多依赖性,但只有一小部分需要在测试期间控制。

    3)我有点坚持使用仅测试环境模块而不是生产验证来进行系统/集成测试的最佳方法。这个问题可能是特定于实现的,但我很好奇人们使用什么方法。作为参考,我的应用程序是一个基于servlet的Web应用程序。

    还有其他提示吗?

    2 回复  |  直到 15 年前
        1
  •  13
  •   ColinD    15 年前

    1)通常情况下,您将事情分解为多个模块。guice的目标之一是帮助使代码模块化,这就是模块的用途。你如何打破这一切取决于你自己(很明显,你不一定非得这么做)。细粒度模块的一个优点是,您可以在特定包中定义模块,并使实现接口包的类私有化。因为模块在包中,所以它可以绑定那些具体的类,并且可以用于配置 Injector (在另一个包装中)。此外,当您只需将一个模块换成另一个模块,而不必在单个单片模块中更改代码,就可以更改操作方式,从而使代码更加灵活。

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

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

        2
  •  0
  •   Noel M    15 年前

    看看这本书 Dependency Injection -它涵盖了guice和spring,因此非常容易从一个框架转换到另一个框架。如果你已经了解了国际奥委会背后的原则,那就太好了。