在Spring Boot框架中,应用程序的启动类必须要有一个main()方法来启动应用程序。然而,在某些情况下,可能会存在多个类都有main()方法,如果需要确定应用程序的具体哪个类是其真正入口类,便需要写一个函数用来获取当前运行主应用程序类。
上代码:
public class Temp {
public static void main(String[] args) {
Class<?> aClass = deduceMainApplicationClass();
System.out.printf(aClass.getCanonicalName());
}
/**
* 推导主应用程序类
*
* @return 返回一个Class对象,表示主应用程序的类,如果无法获取则返回null
*/
private static Class<?> deduceMainApplicationClass() {
try {
// 获取运行时异常堆栈跟踪信息
StackTraceElement[] stackTrace = new RuntimeException().getStackTrace();
// 获取最后一个元素所属的类
for (StackTraceElement stackTraceElement : stackTrace) {
//方法名为main则返回该类
if ("main".equals(stackTraceElement.getMethodName())) {
return Class.forName(stackTraceElement.getClassName());
}
}
} catch (ClassNotFoundException ex) {
// 吞掉异常并继续
}
// 如果无法获取,则返回null
return null;
}
}