我写了一些客户类加载器,它从某个目录(不在类路径中)加载一些类,比如说:
class FileSystemClassLoader extends Classloader{
// implementation details
}
我有一些目录说/home/mhewedy/classes/
不在类路径中,这个目录包含一些我使用前一个classlaoder加载的类。
如何使用我的代码中的这个类加载器来加载类“简单”而无需编写:这样的代码:
Thread.currentThread().setContextClassLoader(new FileSystemClassLoader());
// some code here ...
ClassLoader contextCL = Thread.currentThread().getcontextClassLoader();
答案 0 :(得分:3)
更新以响应OP编辑:
当JVM加载一个类时,它将使用加载“当前”类(per JVM spec)的类加载器。因此,如果您使用自定义类加载器加载的方法Foo.main()
,并且想要创建Bar
的实例,也通过该类加载器加载,则不必执行任何特殊操作
但是,如果您当前的方法是Baz.main()
,并且它是通过系统类路径加载的(在命令行中使用-cp
指定的),那么您必须通过类加载器显式加载该类。没有办法解决这个问题。 “上下文类加载器”用于应用程序代码,用于加载资源; JVM忽略它。
在几乎所有情况下,最好构建一个包含特殊类的类路径。