gpt4 book ai didi

java - Guice 检测未使用的绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 01:53:31 25 4
gpt4 key购买 nike

我刚刚继承了一个庞大的代码库。我正在清理并尝试删除不必要的依赖项。

有没有办法找到注入(inject)器中定义的不必要的依赖项?

最佳答案

您可以使用Elements SPI ,它允许您在运行的注入(inject)器中遍历 Guice 的绑定(bind)。但请记住,Guice 在运行时反射(reflection)性地评估您的树。这允许您添加绑定(bind)并依赖 JIT(即时)绑定(bind),但也使得 Guice 可能永远不会知道您通过注入(inject)器不依赖的类。

在病理情况下,您可能没有定义任何模块,并且通过 JIT 绑定(bind)依赖于所有内容,此时任何未使用的绑定(bind)检测器都将返回空集(漏报)。相反,如果您大量使用 getInstance 或相关的 Injector 方法,但在扫描未使用的 deps 之前没有使用它们,则可能会返回许多依赖项,而这些依赖项最终无法安全删除(误报)。尤其如此,因为 Injector 是可注入(inject)的,因此如果您有一个旧服务定位器(等)的适配器,您可能会发现很难预测 Injector 的所有使用方式。

为了避免意外,您可以调用 requireExplicitBindings() ,它适用于整个 Injector 及其子级,但不适用于其父级或兄弟级。这将导致所有 JIT 绑定(bind)都需要定义,即使仅通过 untargeted binding 。您还可以扫描 Injector 上的 getInstancegetProvidergetMembersInjector 以及 injectMembers 调用,并通过重构减少它们.

现有的解决方案似乎在 bonifaido's guice-unused github tree 中公开可用,它通过显式请求根绑定(bind)请求并重用 Guice 的内置依赖关系图传递访问者来避​​免上述一些问题。 免责声明:这不是我的代码。它很简单,但我不能保证它的安全性或知识产权的状态。

关于java - Guice 检测未使用的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55230580/

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