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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/11020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32MP157驱动开发——按键驱动(中断)

文章目录 编写使用中断的按键驱动程序编程思路设备树相关驱动代码相关 代码修改设备树文件gpio_key_drv.cMakefile编译测试 编写使用中断的按键驱动程序 对于使用中断的按键驱动,内核自带的驱动程序 drivers/input/keyboard/gpio_keys.c 就可以,需要做的…

对gpt的简单认识

1.gpt是什么? GPT(Generative Pre-trained Transformer 生成式预训练Transformer模型)是一种基于Transformer架构的预训练语言模型,由OpenAI开发。GPT模型以无监督学习的方式使用大规模语料库进行预训练,并具有生成文…

cpolar内网穿透工具

文章目录 cpolar内网穿透工具 cpolar内网穿透工具 科学技术的发展日新月异,电子设备在人们的生活中已成为不可或缺的工具,甚至在很多情况下,各类型的电子设备已经成为工作的核心,虽然移动设备越来越小巧,功能也越来越…

基于netlify生成custom SSL certificate

(1)腾讯云申请 (2)域名控制台解析 (3)Nginx下载(crt: CA certificate Chain)

课程27:API接口请求日志【后端】

🚀前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。 专栏适用于人群:We…

图片URL通过js自动上传

场景 已经获取了图片的地址,想直接通过这个链接上传到网站指定位置 操作步骤 找到上传图片对应的控件,一般都是input, 在谷歌浏览器的Elements中 搜索 input[typefile],一般就是需要的对象了找到对应的对象,执行以下代码即可上…

SpringBoot 8种异步实现方式

前言:异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:「发送短信、邮件、异步更新等」,这些都是…

【Maven】Maven 中 pom.xml 文件

文章目录 前言什么是 pom?pom配置一览 1. dependencies2.scope3.properties4.plugin参考 前言 Maven 是一个项目管理工具,可以对 Java 项目进行构建和管理依赖。 本文,我们认识下 pom.xml 文件。POM(Project Object Model, 项目…

如何解决大数据下滚动页面卡顿问题

原文合集地址如下,有需要的朋友可以关注 本文地址 合集地址 前言 之前遇到不分页直接获取到全部数据,前端滚动查看数据,页面就听卡顿的,当然这和电脑浏览器性能啥的还是有点关系。但根源还是一次性渲染数据过多导致的&#xf…

网络安全高级课笔记2

一、实例对象 1.对象是单个实物的抽象,是一个容器,封装了属性和方法 2.构造函数,构造函数就是一个普通的函数,但具有自己的特征和用法 var Vehicle function () {this.price 1000; }; 构造函数的特点有两个: 1.…

【C++从0到王者】第十三站:vector源码分析及手把手教你如何写一个简单的vector

文章目录 一、vector的源码分析1.分析思路2.构造函数和插入接口 二、手把手教你写一个简单的vector1.基本结构2.迭代器与私有成员变量的定义3.构造函数4.size和capacity5.迭代器函数接口6.析构函数7.reserve接口8.尾插9.operator[]运算符重载10.简单的测试前面的接口11.insert以…

【043】解密C++ STL:深入理解并使用 list 容器

解密C STL:深入理解并使用list容器 引言一、list 容器概述二、list容器常用的API2.1、构造函数2.2、数据元素插入和删除操作2.3、大小操作2.4、赋值操作2.5、数据的存取2.6、list容器的反转和排序 三、使用示例总结 引言 💡 作者简介:一个热爱…

154. 寻找旋转排序数组中的最小值 II

已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]若旋转 7 次&#xff0…

队列数据分析积累-1

https://mp.weixin.qq.com/s/XZV_5iioPDHnMQfEPCIlMg BKMR #首先清理缓存。 rm(list ls()) #运行R包,如果没有下载要先下载。 library(bkmr) library(ggplot2) #给数据赋值,如果要自己进行研究,数据的地址以及数据的变量需要对应的自行…

2023年深圳杯数学建模D题基于机理的致伤工具推断

2023年深圳杯数学建模 D题 基于机理的致伤工具推断 原题再现: 致伤工具的推断一直是法医工作中的热点和难点。由于作用位置、作用方式的不同,相同的致伤工具在人体组织上会形成不同的损伤形态,不同的致伤工具也可能形成相同的损伤形态。致伤…

【C++】总结4-this指针

文章目录 什么是this指针this指针存在的意义this指针的特性this指针存在哪里this指针可以为空吗 什么是this指针 C编译器给每个非静态成员函数增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数…

Java NIO Files类读取文件流方式详解

Java NIO Files类读取文件流方式详解 Files类原理概述 java.nio.file.Files是Java标准库提供的一个工具类,用于操作文件和目录。它提供了一系列静态方法,可以用于创建、复制、删除、移动、重命名、读取、写入文件和目录等常见的文件系统操作。同时&…

Xml文件相关操作

Xml文件相关操作 C#中的XML是一种可扩展标记语言(Extensible Markup Language),用于存储和交换数据。在C#中,我们可以使用内置的System.Xml命名空间来处理和操作XML数据。 一、关键概念 1. 标签(Tags) …

代码随想录算法训练营第31天| 455.分发饼干 376. 摆动序列 53. 最大子序和

今日学习的文章链接&#xff0c;或者视频链接 第八章 贪心算法 part01 自己看到题目的第一想法 看完代码随想录之后的想法 455: class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(),g.end());sort(s.…

7D透明屏的市场应用广泛,在智能家居中有哪些应用表现?

7D透明屏是一种新型的显示技术&#xff0c;它能够实现透明度高达70%以上的显示效果。这种屏幕可以应用于各种领域&#xff0c;如商业广告、展览展示、智能家居等&#xff0c;具有广阔的市场前景。 7D透明屏的工作原理是利用光学投影技术&#xff0c;将图像通过透明屏幕投射出来…