【发布时间】:2014-10-14 08:41:42
【问题描述】:
问题: 我的公司有很多不同的罐子/现有项目,他们在客户那里运行。出于调试目的,我们希望生成一个日志,每个组件加载哪个类,更具体地说:from where。例如:jar StackOverFlowJar.jar 中的 stack.overflow.ClassA。
我的想法: 我已经尝试将每个 jar/现有项目传递给自定义类加载器。此自定义类加载器可能会将上述信息写入文件,并将类加载的正常流程委托给其父级。
我的 CustomClassLoader 扩展了 ClassLoader,我可以看到它加载了以下类:
java.lang.Class
java.lang.Thread
java.lang.ThreadGroup
等等,所有来自核心库的标准java类。这些类确实到达了我的 CustomClassLoader。但是,如下图所示:
来源:http://javarevisited.blogspot.nl/2012/12/how-classloader-works-in-java.html
有多个类加载器。 Bootstrap ClassLoader(我用我的 CustomClassLoader 扩展的那个)只负责核心库。如果它找不到自定义创建的类,它将把它委托回扩展类加载器。如果 Extension ClassLoader 找不到它,它会将它委托回 Application ClassLoader,我可以在调试方式中看到,这确实是加载我的自定义类的方式。但它不是通过我的 CustomClassLoader 来实现的。
我的问题: 是否可以扩展应用程序类加载器和扩展类加载器?或者是否有其他解决方法可以解决我的问题?
非常感谢您!
【问题讨论】:
标签: java classloader