SpringBoot复习:(4)打成的jar包是如何启动的?

jar包通过MANIFEST的Main-Class指定了主类JarLauncher,

JarLauncher的main方法代码如下:

其中调用的launch的代码如下:

首先,创建了一个自定义的ClassLoader,代码如下:

其中调用的重载的createClassLoader代码如下:

该方法返回的LauncherURLClassLoader类对象,LauncherURLClassLoader是URLClassLoader的子类。

其次,通过getMainClass获取主类,代码如下:

该方法会从jar包里MANIFEST.MF这个文件里读取Start-Class这个属性,

也就是我们自己定义的SpringBoot 应用的主类。

最后,调用launch(args, launchClass, classLoader); launch的代码如下:
该方法首先将之前创建出来的LauncherURLClassLoader类型的ClassLoader作为线程上下文类加载器,然后调用createMainMethodRunner,

然后调用其run方法,

在该方法中,首先使用线程上下文类加载器加载我们的SpringBoot 应用程序的启动类, 然后通过Class对象获取main方法,最后通过反射的方式调用main方法,也就真正启动了程序。

相关推荐
为思念酝酿的痛1 天前
POSIX信号量
linux·运维·服务器·后端
小羊在睡觉1 天前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
swipe1 天前
Neo4j + Graph RAG 医疗知识图谱工程实践:患者教育问答真正需要的是“关系可追溯”
后端·langchain·llm
源码宝1 天前
MES系统源码:Java8 + SpringBoot2.7 + MySQL8 + Redis,后端源码清爽易扩展
java·后端·源码·springboot·mes系统·源码二开·mes源码
金銀銅鐵1 天前
[Java] 如何理解 class 文件中方法的 descriptor?
java·后端
村口张大爷1 天前
05 — 分层架构与依赖倒置
后端·架构·系统架构
憧憬成为java架构高手的小白1 天前
苍穹外卖--day09
java·spring boot·百度
Jasonakeke1 天前
SpringBoot自动配置原理揭秘
java·spring boot·后端
IT_陈寒1 天前
Vite热更新失灵?你可能漏了这个配置
前端·人工智能·后端
Ramble_Naylor1 天前
东方通(TongWeb)SpringBoot开发指导
java·spring boot