gpt4 book ai didi

java - 掌握 Google Guice

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:34 28 4
gpt4 key购买 nike

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

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

2) 你是在顶层有一个注入(inject)器来注入(inject)整个对象树,还是有多个注入(inject)器点缀其中只注入(inject)那些你真正需要注入(inject)的依赖项?我在这里想到的是我自己的代码库,它当然有很多依赖项,但只有一小部分是我在测试期间需要控制的。

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

还有其他建议吗?

最佳答案

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

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

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

关于java - 掌握 Google Guice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3265172/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com