隐私使用Java Custom类加载器?

时间:2010-03-18 17:34:44

标签: classloader

我写了一些客户类加载器,它从某个目录(不在类路径中)加载一些类,比如说:

class FileSystemClassLoader extends Classloader{
  // implementation details
}

我有一些目录说/home/mhewedy/classes/不在类路径中,这个目录包含一些我使用前一个classlaoder加载的类。

如何使用我的代码中的这个类加载器来加载类“简单”而无需编写:这样的代码:

Thread.currentThread().setContextClassLoader(new FileSystemClassLoader());
// some code here ...
ClassLoader contextCL = Thread.currentThread().getcontextClassLoader();

1 个答案:

答案 0 :(得分:3)

更新以响应OP编辑:

当JVM加载一个类时,它将使用加载“当前”类(per JVM spec)的类加载器。因此,如果您使用自定义类加载器加载的方法Foo.main(),并且想要创建Bar的实例,也通过该类加载器加载,则不必执行任何特殊操作

但是,如果您当前的方法是Baz.main(),并且它是通过系统类路径加载的(在命令行中使用-cp指定的),那么您必须通过类加载器显式加载该类。没有办法解决这个问题。 “上下文类加载器”用于应用程序代码,用于加载资源; JVM忽略它。

在几乎所有情况下,最好构建一个包含特殊类的类路径。