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

相关推荐
huahailing1024几秒前
Spring Boot 异步事务最佳实践:TransactionTemplate 实战指南
数据库·spring boot·后端
Detachym3 分钟前
InsightFlow:基于 Spring Boot+Redis+Docker 的实时监控告警系统全流程开发与部署
spring boot·redis·docker
二月夜7 分钟前
记SpringBoot升级Tomcat引发的两类典型问题及解决方案
spring boot·后端·tomcat
神奇小汤圆9 分钟前
面试官:什么是 fail-fast?什么是 fail-safe?
后端
李白的粉11 分钟前
基于springboot的来访管理系统
java·spring boot·毕业设计·课程设计·源代码·来访管理系统
忘机山人12 分钟前
在 Kubernetes 上用 Fluent Bit 收集 Nginx 日志到 Easysearch
后端
鸿乃江边鸟17 分钟前
Rust 的 mod(模块) 说明
开发语言·后端·rust
敲代码的嘎仔18 分钟前
Java后端开发——基础面试题汇总
java·开发语言·笔记·后端·学习·spring·中间件
掘金者阿豪25 分钟前
VibeVoice告别单调配音!加上cpolar实现多角色语音随时随地搞创作
后端
再吃一根胡萝卜25 分钟前
pip install -e 让你的Python包开发效率翻倍
后端