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方法,也就真正启动了程序。

相关推荐
掘金者阿豪9 分钟前
Kavita+cpolar 打造随身数字书房,让资源不再混乱,通勤 、出差都能随心读。
后端
心之语歌31 分钟前
Spring Security api接口 认证放行
后端
用户83562907805140 分钟前
Python 实现 PPT 转 HTML
后端·python
0xDevNull43 分钟前
MySQL索引进阶用法
后端·mysql
舒一笑44 分钟前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员
UIUV1 小时前
Splitter学习笔记(含RAG相关流程与代码实践)
后端·langchain·llm
cipher2 小时前
HAPI + 设备指纹认证:打造更安全的远程编程体验
前端·后端·ai编程
雨中飘荡的记忆2 小时前
保证金系统入门到实战
java·后端
秋水无痕2 小时前
从零搭建个人博客系统:Spring Boot 多模块实践详解
前端·javascript·后端
用户9003486133462 小时前
GO语言基础:反射
后端