Java-在JVM启动时加载其他类
我想在JVM启动时加载一个额外的类。具体来说,类应该在加载所有核心库之后加载(因此至少在Java-在JVM启动时加载其他类,java,class,load,jvm,boot,Java,Class,Load,Jvm,Boot,我想在JVM启动时加载一个额外的类。具体来说,类应该在加载所有核心库之后加载(因此至少在rt.jar和lib/ext之后) 该类未在任何位置引用。它包含一个静态块,用于设置我们希望所有URL连接都使用的JVM范围的代理 我已经尝试了-Xbootclasspath/a,-Xbootclasspath/p选项。将-verbose:class添加到JVM\u OPTS以及由-Xbootclasspath变量创建的加载/打开输出指示所有核心库都已“加载”,而我的JAR只是“打开” 有没有一种方法可以在所
rt.jar
和lib/ext
之后)
该类未在任何位置引用。它包含一个静态块,用于设置我们希望所有URL连接都使用的JVM范围的代理
我已经尝试了-Xbootclasspath/a
,-Xbootclasspath/p
选项。将-verbose:class
添加到JVM\u OPTS
以及由-Xbootclasspath
变量创建的加载/打开输出指示所有核心库都已“加载”,而我的JAR只是“打开”
有没有一种方法可以在所有核心类都加载后在JVM启动时强制加载一个类,或者更好的方法是在JAR中加载所有类?经过研究,我找不到比自定义类加载程序更好的方法了 这是我写的。它固有地为所有类加载方法使用默认类加载器,但提供对非静态初始值设定项的访问,其中可以进行自定义类加载/引用
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
指定自定义类加载器。您的意思是只引用要加载的静态类吗?或者你还做了什么?自从你提出这个解决方案已经两年了,你有没有找到更好的方法?@AndrewBate我已经修改了我的描述(这是错误的)和代码,尽管我现在无法测试它,所以如果你有,请告诉我。正如你所提到的,我很久以前就为一个特定的用例写过这篇文章,从那时起就没有尝试过同样的目标,所以没有更好的选择来建议。我甚至不确定非静态初始值设定项是否必要,我本以为您可以在构造函数中调用loadClass
。。。不过,我还是满怀希望地选择了这种方法,理由很充分:)