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

相关推荐
贺国亚8 分钟前
评估-Eval-Hallucination与质量度量
后端·面试
Java内核笔记9 分钟前
Spring Security 源码解析(五)表单登录认证全流程:UsernamePasswordAuthenticationFilter 拆解
后端
Dilee12 分钟前
Spring AI 对话记忆:MessageChatMemoryAdvisor 最小接入
后端
游码峰行15 分钟前
游戏脚本挂攻防-在PoW中实现动态Hash策略及应用实践
后端
一条泥憨鱼15 分钟前
苍穹外卖【day6|微信登录与商品浏览功能】
后端·mybatis·苍穹外卖
用户7623524259117 分钟前
Kafka客户端消息流转流程
后端
橘子星17 分钟前
深入理解 AJAX 中的 JSON 序列化与 JS 异步处理
前端·javascript·后端
SimonKing18 分钟前
Qoder 提供免费 Qwen3.7-Max,无需订阅
java·后端·程序员
杨运交22 分钟前
[033][缓存模块]基于 Redisson 的租户隔离 Redis Key 前缀设计
spring boot
IT_陈寒1 小时前
SpringBoot自动配置这么智能,为啥我写的Bean注入不了?
前端·人工智能·后端