1

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

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

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

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

4

1 回答 1

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

于 2013-05-13T10:53:05.920 回答