java中的系统类加载器有用吗?

时间:2012-11-11 08:54:35

标签: java classloader

我希望系统类加载器能够为我的应用程序接管类加载。所以,如果我运行我的程序,

java -Djava.system.class.loader=MyClassLoader Main

我希望Main可以通过MyClassLoader加载,这样我就可以控制应用程序中的类加载。但这不会发生。 Main仍然由默认的系统类加载器(sun.misc.Launcher $ AppClassLoader)加载,以及从Main引用的其他类。但是,对getSystemClassLoader()的调用将返回MyClassLoader的实例。

这有用吗?我的自定义系统类加载器加载Main是否有意义?如何控制应用程序的类加载?谁使用getSystemClassLoader()值?

1 个答案:

答案 0 :(得分:1)

如果您只是将URLClassLoader子类化而没有覆盖,this is the documented behaviour you should expect

  

首次在父类加载器中搜索后,将按照为类和资源指定的顺序搜索URL。

如果父类加载器可以加载该类,那么它会这样做,并且为该类报告的加载器将是父类加载器。为了还原此父级优先类加载策略(Java类加载器的默认值),您必须覆盖loadClass