gpt4 book ai didi

java - Guice:我是否必须使用@Inject 来注释对象图的每个类?

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

我想介绍 Guice 用于现有的中型项目。对于我的需求,我需要一个自定义范围( session 太大,而对我的项目来说请求太小)。

想象一下,我请求 guice 为我提供A 类的实例,它与许多其他类 有直接和间接的依赖关系(组合) .

我的自定义提供程序能够提供用作所有相关类的构造函数参数的类的实例。

问题:

  • 我真的必须在所有相关类的构造函数上放置一个@Inject(和我的自定义范围)注释,或者有什么方法可以指导只需要我请求的顶级类上的这些注释,并且所有进一步的依赖关系都通过“询问”我的自定义范围来解决依赖类型的提供者?

如果这是真的,这将增加引入 Guice 的工作量,因为我必须调整 1000 多个类。感谢在介绍 guice 期间提供的任何帮助和经验。

最佳答案

首先,可以在不在任何地方放置 @Inject 注释的情况下使用 Guice。 Guice 支持 Provider bindings , @Provides methodsconstructor bindings ,所有这些都允许您根据自己的选择绑定(bind)类型。然而,对于它的正常操作,它需要 @Inject 注释作为元数据,告诉它一个类需要什么依赖项以及它可以在何处注入(inject)它们。

这样做的原因是,否则,它无法确定性地告诉它应该注入(inject)什么以及注入(inject)哪里。例如,类可能有多个构造函数,而 Guice 需要某种不依赖于任何猜测的方法来选择一个进行注入(inject)。您可以说“好吧,我的类只有一个构造函数,所以它不需要 @Inject”,但是当有人向类添加新的构造函数时会发生什么?然后 Guice 不再有其决定的基础并且应用程序中断。此外,这一切都假设您只是在进行构造函数注入(inject)。虽然构造函数注入(inject)通常是最好的选择,但 Guice 也允许方法(和字段)注入(inject),并且需要显式指定类的注入(inject)点的问题在那里更严重,因为大多数类将有许多方法不是用于注入(inject),最多有一些是。

除了 @Inject 在告诉 Guice 方面的重要性之外,它还可以作为类的用途文档——该类是应用程序的依赖注入(inject)有线基础设施的一部分.它还有助于在您的类中应用 @Inject 注释时保持一致,即使目前对于某些仅使用单个构造函数的类来说并非绝对必要。我还注意到您可以使用 JSR-330's @javax.inject.Inject Guice 3.0 中的注释,如果标准 Java 注释比特定于 Guice 的注释更适合您。

我不太清楚您询问提供商的范围是什么意思。范围通常不会自己创建对象;他们控制何时向无范围提供者询问新实例的依赖项以及如何控制该实例的范围。当然,提供者是他们运作方式的一部分,但我不确定这是否是您的意思。如果您有一些提供对象实例的自定义方法,Provider 绑定(bind)和 @Provides 方法是实现该目的的方法,并且不需要 @Inject 类本身的注释。

关于java - Guice:我是否必须使用@Inject 来注释对象图的每个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013164/

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