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

相关推荐
paopao_wu5 分钟前
DeepSeek-OCR实战(06):SpringBoot应用接入
java·spring boot·ai·ocr·deepseek
wangqiaowq10 分钟前
在streampark运行paimon-flink-action-1.20.0.jar
大数据·flink·jar
q***697736 分钟前
快速在本地运行SpringBoot项目的流程介绍
java·spring boot·后端
q***428239 分钟前
前端的dist包放到后端springboot项目下一起打包
前端·spring boot·后端
唐小码1 小时前
Redis RedisTimeSeries 在springboot中的应用
spring boot·redis·后端
回家路上绕了弯2 小时前
高并发订单去重:布隆过滤器过滤已存在订单号的实战方案
分布式·后端
刘一说2 小时前
Spring Boot 应用的云原生 Docker 化部署实践指南
spring boot·docker·云原生
申阳2 小时前
Day 11:集成百度统计以监控站点流量
前端·后端·程序员
Cache技术分享2 小时前
239. Java 集合 - 通过 Set、SortedSet 和 NavigableSet 扩展 Collection 接口
前端·后端
demonre2 小时前
阿里云 Debian 13.1 安装 docker 并切换阿里云镜像源
后端·docker