我正在构建几个Java、Maven项目的Java库。由于这是一个库,因此任何项目中都没有main方法。在Web应用程序中,您可以创建一个实现ServletContextListener的类,它将在服务器启动时执行(例如,当Tomcat启动时)。我想对库做同样的事情(它既不是Web应用程序也不是控制台应用程序,只是一个可重用的库)。如果有人编写使用我的库的程序,我希望我的初始化器类在JVM启动时执行一些我希望它执行的初始化工作。我该怎么办呢?谢谢。
-javaagent:
,则会在运行的程序的主方法之前调用premain
方法。import java.lang.instrument.Instrumentation;
public class Agent {
public static void premain(String args, Instrumentation instrumentation){
// early initalization
}
}
https://zeroturnaround.com/rebellabs/how-to-inspect-classes-in-your-jvm/
@PostConstruct
。在使用Java SE时,您可以通过一个单例类来封装您的Java库 - 这是一个作为进入库其余功能的“入口”的类。单例类的构造函数可以调用所有必要的初始化代码,然后将控制权交回给调用者(主Web应用程序)。public class LibraryInstance {
private FunctionalClass1 functionalClass1;
private FunctionalClass2 functionalClass2;
...
private LibraryInstance() { runInitializingCode(); }
private static final LibraryInstance instance = new LibraryInstance();
public static LibraryInstance getInstance() {
return instance;
}
private void runInitializingCode() {
....
}
}
static
块的情况下,无法调用类上的方法,无论是静态的还是非静态的。你正在关注执行的确切点,但对我来说这毫无意义。 - SeverityOne
static
初始化块中。 - Andreas