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

相关推荐
ITender8 分钟前
Nacos 迁移引发 Full GC 问题深度分析
后端·面试
Gatlin8 分钟前
逆向学习:我为什么放着文档不看,直接读字节码
后端
我不是外星人8 分钟前
一键还原任意网站,这套 Playwright + 多 Agent 工程流太猛了
前端·后端·ai编程
geovindu13 分钟前
java: Singleton Pattern
java·开发语言·后端·单例模式·设计模式·创建型模式
Nturmoils16 分钟前
JOIN 不是拼上就完事,多表查询这几个坑先跑一遍
数据库·后端
IT_陈寒34 分钟前
Vue的v-if和v-show,我竟然用错了这么久
前端·人工智能·后端
一路向北North36 分钟前
Spring Security OAuth2.0(16):密码模式
java·后端·spring
大P哥阿豪40 分钟前
Go panic & recover:深入Go语言的异常拯救之道
开发语言·后端·golang·go
IT_陈寒1 小时前
React状态更新延迟搞晕我,原来是闭包在捣鬼
前端·人工智能·后端
卓怡学长1 小时前
w273基于springboot的智能笔记的开发与应用
java·spring boot·spring·intellij-idea