我试图理解依赖注入并没有完全理解它,除了我设法理解了这种理解使得很难理解别人的代码。 :'(

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

我追溯到此,发现HistoryManager类是一个接口,而我的路径似乎已经死掉了。那里没有代码,也没有引用任何其他类。我已经通过随机探索项目中的100多个类找到了路径的尽头,但是我似乎不太想将它们联系起来。我找不到在该堆栈另一端可以找到的第一个类AccessManagerImpl的位置。

我可以对依赖注入进行解释,这可能适用于这种情况。非常感谢!

最佳答案

假设@ImplementedBy界面上没有HistoryManager批注,则需要检查负责绑定此类型的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可能也有帮助。

09-28 10:13