我想在JVM启动时加载一个额外的类。具体地说,类应该在加载所有核心库之后加载(至少在rt.jar和lib/ext之后)。
该类在任何地方都没有被引用。它包含一个设置JVM范围的代理的静态块,我们希望所有URL连接都使用该代理。
我已经尝试过-Xbootclasspath/a、-Xbootclasspath/p选项。在将-verbose:class添加到JVM_OPTS之后,由-Xbootclasspath变体创建的加载/打开输出表明所有核心库都已“加载”,而我的JAR只是“打开”。
有没有一种方法可以在所有核心类都加载之后,在JVM启动时强制加载一个类--或者更好的是JAR中的所有类?
发布于 2013-05-13 18:53:06
经过研究,我找不到比定制类加载器更好的方法了。
这是我写的。它固有地对所有类加载方法使用默认的类加载器,但提供对非静态初始化器的访问,在该初始化器中可以进行自定义类加载/引用。
public class CustomClassLoader extends ClassLoader {
{
// Custom class loading goes in this non-static initializer.
loadClass("java.org.myorganisation.package.MyClass");
}
public CustomClassLoader() {
super(CustomClassLoader.class.getClassLoader());
}
public CustomClassLoader(ClassLoader parent) {
super(parent);
}
}通过定义系统属性-Djava.system.class.loader=com.anon.mypackage.CustomClassLoader来指定自定义类加载器。
https://stackoverflow.com/questions/16477131
复制相似问题