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

相关推荐
小码哥_常1 天前
Spring Boot:别再重复造轮子,这些内置功能香麻了
后端
皮皮林5511 天前
OpenFeign 首次调用卡 3 秒?八年老开发扒透 5 个坑,实战优化到 100ms!
后端
callJJ1 天前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
海兰1 天前
【第27篇】Micrometer + Zipkin
人工智能·spring boot·alibaba·spring ai
千寻girling1 天前
《 Git 详细教程 》
前端·后端·面试
海兰1 天前
【第28篇】可观测性实战:LangFuse 方案详解
人工智能·spring boot·alibaba·spring ai
0xDevNull1 天前
Linux 中 Nginx 代理 Redis 的详细教程
redis·后端
GetcharZp1 天前
告别 Nginx 手动配置!这款 Go 语言开发的云原生网关,才是容器化时代的真香神器!
后端
RuoyiOffice1 天前
SpringBoot+Vue3 企业考勤如何处理法定假期?节假日方案、调休补班与工作日判断链路拆解
spring boot·后端·vue·anti-design-vue·ruoyioffice·假期·人力
xmjd msup1 天前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring