gpt4 book ai didi

java - 依赖注入(inject)的正确结构(使用 Guice)

转载 作者:行者123 更新时间:2023-12-04 06:07:03 27 4
gpt4 key购买 nike

我想要一些关于为具有下述结构的系统构建依赖注入(inject)的最佳方法的建议和反馈。我正在使用 Guice,因此更喜欢以基于注释的声明为中心的解决方案,而不是重 XML 的 Spring 样式配置。

考虑一组相似的对象,Ball, Box, and Tube , 每个都依赖于 Logger ,通过构造函数提供。 (这可能并不重要,但所有四个类都恰好是单例 --- 应用程序,而不是四人组,品种。)

一个 ToyChest类负责创建和管理三个形状对象。 ToyChest本身不依赖于Logger ,除了创建形状对象之外。
ToyChest类在 Main 中被实例化为应用程序单例类(class)。

我对在 ToyChest 中构造形状的最佳方法感到困惑。 .我要么 (1) 需要访问 Guice Injector实例已附加到 Module绑定(bind) Logger到一个实现或 (2) 需要创建一个新的 Injector附在右边Module .

(1) 通过添加 @Inject Injector injector 来完成字段到 ToyChest ,但这感觉很奇怪,因为 ToyChest实际上并没有任何直接的依赖关系——只有它实例化的 child 的那些。

对于 (2),我不确定如何传入适当的 Module .

我在正确的轨道上吗?有没有更好的方法来构建它?

答案question提到传入 Provider而不是直接使用注入(inject)器,但我不确定它应该如何工作。

编辑:

也许一个更简单的问题是:在使用 Guice 时,构造形状对象的合适位置在哪里? ToyChest将对它们进行一些配置,但我想它们可以在其他地方构建。 ToyChest (作为管理它们的容器),而不是 Main ,在我看来只是构建它们的合适位置。

最佳答案

正确的方法是让 guice 构建您的依赖项。那就是创建和配置。

在您的情况下,您应该在 Main 中构建一个注入(inject)器。 .从注入(inject)器你得到ToyChest .当您获得ToyChest通过注入(inject)器,它由 guice 管理,您可以依靠它来提供正确配置的所有依赖项。

在您的情况下,您可以注入(inject) Provider<Ball> , Provider<Box>等在 ToyChest并在需要时从提供者那里检索实例。 ToyChest不负责构造实例,只是为了使用它。您也可以查看MapBinder如果你有一个插件架构。

到目前为止,一切都由 guice 管理,因此形状可以在使用类不知道的情况下注入(inject)它们的记录器。

如果您有一些运行时参数想要传递给新创建的形状实例,您可以使用 AssistedInject .

只是一个提示:您不需要使用构造函数注入(inject),您可以在字段或 setter 上进行注入(inject),这简化了构造函数。

关于java - 依赖注入(inject)的正确结构(使用 Guice),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8236594/

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