找到加载特定类的ClassLoader

时间:2012-03-15 14:15:40

标签: java classloader

有没有办法确定哪个ClassLoader加载特定的类?或者更具体地说,从特定类的加载位置?

我的情况是加载旧的db驱动程序类。我想找到加载旧驱动程序的文件。

我最初的方法是在ClassLoader.loadClass(..)方法上设置一个调试点,并在加载类后停止vm,看看哪个类加载器正在加载它。不幸的是,loadClass方法经常被调用,很难在类加载的地方停止。我将尝试设置断点过滤器。但是,还有另一个问题:由于ClassLoader体系结构,即使ClassLoader不负责加载,也会调用loadClass。

必须有更好的方法来实现我想要的。您是否有想法或建议在哪里寻找解决方案?

3 个答案:

答案 0 :(得分:6)

你如何推出你的计划?

向命令行添加以下选项记录正在加载的每个类的位置。

-verbose:class

这些日志通常出现在sysout中。但是,根据日志记录的配置方式,您可能需要查看一下。

答案 1 :(得分:5)

clazz.getProtectionDomain().getCodeSource().getLocation()

明显! (可能是NPE。)

ClassLoader s可以从多个位置加载类。)

答案 2 :(得分:0)

此命令的-verbose:jni选项将显示加载的类,这些类不是用java编写的,即“java native interface”。

-dbednar