我刚刚开始使用Google Guice作为依赖注入框架,并试图将其改造为我最近写的一个中小型项目.我了解Guice如何工作的基础知识,但对某些方法细节有些模糊.例如:
1)模块用于定义绑定,然后将其绑定到注入器中.你倾向于将一切都放在一个模块中,还是倾向于将事情分解成许多较小的模块?
2)您是否在顶层注入了一个注射整个对象树或多个注射器的注射器,仅注射您真正需要注入的依赖项?我在这里考虑我自己的代码库,当然,它有很多的依赖关系,但只有少数几个我需要在测试期间进行控制.
3)我稍微停留在使用仅测试环境的模块而不是生产版本进行系统/集成测试的最佳方式.这个问题很可能是具体的实现,但我很好奇人们使用什么方法.作为参考,我的应用程序是一个基于servlet的网络应用程序.
任何其他指针?
解决方法
1)通常你会把事情分解成多个模块. Guice的目标之一是帮助代码模块化,这就是模块.你如何打破这一切取决于你(显然你绝对不需要).更精细的模块的一个优点是您可以定义特定包中的模块,并使实现接口的类package-private.由于模块在包中,因此可以绑定这些具体类,并可用于配置Injector(在另一个包中).此外,您可以通过将一个模块更改为另一个模块,而不必在单个单个模块中更改代码,从而使您的代码更灵活.
2)是的,顶级注射器一个注射整个物体树是通常应该做的事情.这返回到模块的事情…使用它们将依赖关系分解成组并使用一个注入器.
3)使用不同的入门点类来配置进样器.对于一个独立的应用程序,我会有一个不同的主类…对于webapp,我想你可以单独使用GuiceServletContextListener进行测试.然后,您可以使用模块替换整个模块进行测试,或者使用Modules.override替换特定模块中的绑定等.