我们如何在JVM上加载类开始(直接)



大家下午好,

我想知道有没有办法让类的静态块运行,即使类本身没有被引用?

我知道它是惰性加载的,因此只需调用该类的任何函数就会开始启动该类

然而,我希望类在任何调用之前启动,换句话说,我希望它在JVM启动时运行,而不管它是否被引用。

在jar启动时预加载java类/库提出了一个解决方案,但这并不是我真正想要的解决方案(基本上我不想做Class.forName,我希望它在JVM启动时完成)

我们该怎么做呢?

如果有办法做到这一点,可能需要使用JVM选项,这并不完全优雅或可移植。

如果您只需要在实际应用程序代码执行之前初始化一些类,那么在现有应用程序周围使用包装类可能是一种更干净的选择:

public class LoggedLauncher {
    public static void main(String[] args) {
        // Do whatever you need to initialize your logging class
        //
        // e.g. call a static method:
        //
        // MyLogger.init();
        // ...then start your application
        MyApplication.main(args);
    }
}

您甚至可以使用一些反射,以便将应用程序类作为参数提供给包装器,从而替换硬编码的引用。如果这样做,请不要忘记操作args数组,以便将正确的参数传递给应用程序的main()方法。

相关内容

最新更新