gpt4 book ai didi

java - 使用 Guice 的逆向工程项目的策略?

转载 作者:行者123 更新时间:2023-11-29 08:17:42 24 4
gpt4 key购买 nike

我曾尝试理解依赖注入(inject)但并没有完全理解它,除了我已经设法理解它使理解其他人的代码变得困难之外。 :'(

无论如何,我不确定如何简要描述我的问题,但我会尝试。目前,我是唯一一个从事 Java 项目的编码员,该项目由数十名孤独者共同开发了大约六年。它大量使用了 Google 的 Guice 库。我应该采用一些现有代码并以不同的方式实现它;具体来说,使用现有的密码验证方法,而不是将其应用于 JMenu 中的每个 JMenuItem,而是将其应用于整个 JMenu,这样如果输入错误的密码或没有输入密码,所有 JMenuItem 将被禁用。如果密码错误,则不会发生这种情况,让我相信问题出在 if 语句中,它本身就是一长串依赖项:
if (!ViewScanApp.getApplication().getHistoryManager().isAuthenticated())

我回溯到这里,发现 HistoryManager 类是一个接口(interface),我的路径似乎就此结束;那里没有代码,也没有引用任何其他类。通过随机探索项目中的 100 多个类,我找到了路径的尽头,但我似乎无法将它们联系起来。我找不到在这个堆栈的另一端找到的第一个类 AccessManagerImpl 在哪里被调用。

我可以使用可能适用于这种情况的依赖注入(inject)的解释。非常感谢!

最佳答案

假设 HistoryManager 接口(interface)上没有 @ImplementedBy 注释,您将需要检查负责绑定(bind)它的 Guice Module类型。

在 Eclipse 中,有一个命令可以查找某个类的出现。我敢打赌 Netbeans 也有类似的东西。使用它来查找 HistoryManager 的出现。其中至少一个应该出现在实现 com.google.inject.Module(或扩展 AbstractModule)的类中。你可能会看到类似的东西

protected void configure() {

bind(HistoryManager.class).to(HistoryManagerImpl.class);

}

或者,如果您喜欢快速而肮脏的经验主义,您可以加入 println():

HistoryManager mgr = ViewScanApp.getApplication().getHistoryManager();
System.out.println("HistoryManager implementation: " + mgr.getClass());
if (!mgr.isAuthenticated())

无论您如何定位它,HistoryManagerImpl 类都是您想要找到踪迹的地方。

我没用过,但是Guice graphing tool也可能有帮助。

关于java - 使用 Guice 的逆向工程项目的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3197876/

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