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

相关推荐
suaizai_3 小时前
Fastjson高危漏洞紧急修复指南
spring boot
SomeB1oody6 小时前
【RustyML入门】6.3. 并行归约
开发语言·后端·机器学习·rust·教程
Profile排查笔记7 小时前
指纹浏览器哪个好?从 Profile、代理、权限和自动化能力判断是否适合
前端·人工智能·后端·自动化
用户938515635077 小时前
用 AI 结对编程从 0 搭一个"单词后台管理系统":Next.js + Supabase + Drizzle + shadcn/ui 全记录
后端·postgresql·next.js
爱学习的小邓同学7 小时前
Golang --- (1)第一个Golang程序
开发语言·后端·golang
小灰灰搞电子8 小时前
Rust+Slint 实现的“DNA双螺旋”加载动画源码分享
后端·rust·slint·加载动画
面向Google编程9 小时前
向量库不再囤数据:Milvus 3.0 零拷贝直读数据湖
后端
gugucoding10 小时前
59. 【Java】Spring Boot 入门:第一个 Web 应用
java·开发语言·spring boot
IT_陈寒10 小时前
Redis内存警告竟是因为这个不起眼的配置项
前端·人工智能·后端
Python私教10 小时前
AI 漫剧角色一进分镜就变脸?把提示词升级成“角色 ID + 镜头合同”
后端