Java - 在JVM启动时加载其他类

时间:2013-05-10 07:19:39

标签: java class load jvm boot

我想在JVM启动时加载一个额外的类。具体来说,应该在加载所有核心库之后加载该类(因此至少在rt.jarlib/ext之后)。

该类未在任何地方引用。它包含一个静态块,用于设置JVM范围的代理,我们希望使用所有URL连接。

我尝试了-Xbootclasspath/a-Xbootclasspath/p选项。将-verbose:class添加到JVM_OPTS以及-Xbootclasspath变体创建的加载/打开输出表示所有核心库都已“加载”,而我的JAR只是“打开”。

有没有办法在所有核心类加载后,在JVM启动时强制加载一个类 - 或者更好的是JAR中的所有类?

1 个答案:

答案 0 :(得分:0)

经过研究,我找不到比自定义类加载器更好的方法。

这是我写的。它本质上为所有类加载方法使用默认的类加载器,但提供对非静态初始化程序的访问,其中可以进行自定义类加载/引用。

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来指定自定义类加载器。