2010-03-18 36 views
1

我已经写了一些客户的类加载器加载从某一目录中的某些类(不是在classpath中),说:Java自定义类加载器的隐含用法?

class FileSystemClassLoader extends Classloader{ 
    // implementation details 
} 

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

如何使用这个类加载器从我的代码加载类“简约”不写:这样的代码:

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

回答

3

更新对OP回应编辑:

当JVM装入类,它将使用加载“当前”类的类加载器(per JVM spec)。因此,如果您使用的是方法Foo.main(),该方法使用您的自定义类加载器加载,并且您希望创建一个Bar的实例,该实例也是通过该类加载器加载的,则无需执行任何特殊操作。但是,如果您当前使用的方法是Baz.main(),并且它是通过系统类路径加载的(在命令行中使用-cp指定),则必须通过类加载器显式加载该类。这是没有办法的。 “上下文类加载器”用于应用程序代码,用于加载资源; JVM忽略它。

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

+0

ahh,你的意思是,如果我的自定义类加载器加载了类A,那么在A中加载的任何类都将由customer classlaoder(父类加载器)加载,对吧? – 2010-03-18 20:02:07

相关问题