Guice检测未使用的绑定

问题描述 投票:1回答:1

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

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

java dependency-injection guice
1个回答
2
投票

您可以使用Elements SPI,它允许您在正在运行的Injector中遍历Guice的绑定。但请记住,Guice会在运行时反复评估您的树。这允许您添加绑定并依赖于JIT(即时)绑定,但也使Guice可能从未意识到您不依赖于注入器的类。

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

为了避免意外,您可以调用requireExplicitBindings(),它适用于整个注射器及其子,但不适用于其父母或兄弟姐妹。这将导致所有JIT绑定都需要定义,即使只通过untargeted binding。你也可以扫描getInstancegetProvidergetMembersInjectorinjectMembers调用Injector并通过重构来减少它们。

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

© www.soinside.com 2019 - 2024. All rights reserved.