我刚刚开始使用Google Guice作为依赖注入框架,并试图将其改造为我最近写的一个中小型项目。我理解Guice如何工作的基础知识,但对于一些方法细节我有点模糊。例如:
1)模块用于定义绑定,然后将其输入喷射器。你倾向于把所有东西放在一个模块中,还是倾向于把东西分解成许多小模块?
2)您是否在顶层有一个注射器注入整个对象树或多个注射器,只注入那些您真正需要注入的依赖关系?我在想我自己的代码库,当然,它有许多依赖项,但在测试期间我只需要控制一小部分。
3)我稍微坚持使用仅测试环境模块而不是生产版本来获得系统/集成测试的最佳方法。这个问题可能是特定于实现的,但我很好奇人们使用什么方法。作为参考,我的应用程序是一个基于servlet的Web应用程序。
还有其他指示吗?
答案 0 :(得分:13)
1)通常你会把事情分解成多个模块。 Guice的目标之一是帮助使代码模块化,这就是模块的用途。你如何打破这个取决于你(显然,你并不是绝对必须)。更细粒度模块的一个优点是,您可以在特定包中定义模块,并使实现接口包的类 - 私有。由于模块在包中,它可以绑定那些具体类,它们可以用于配置Injector
(在另一个包中)。此外,只需将一个模块更换为另一个模块,而不必在单个单片模块中更改代码,就可以使代码更加灵活。
2)是的,顶层注入整个对象树的一个注入器是通常应该完成的方式。这回到模块的事情......使用它们将依赖关系分解为组并使用一个注入器。
3)使用配置进样器的不同入口点类。对于一个独立的应用程序,我有一个不同的main
类...对于一个webapp,我想你可以单独GuiceServletContextListener
进行测试。然后,您可以使用模块替换整个模块进行测试,或使用Modules.override
覆盖特定模块中的绑定等。
答案 1 :(得分:0)
看看书Dependency Injection - 它涵盖了Guice和Spring,因此非常适合从一个框架转换到另一个框架。如果你已经理解了IoC背后的原理,那肯定是好的。