粉丝1967获赞8189


今天威哥给大家解析一道源自阿里一面的面试题,说说 supreme boot 中架包启动的原理。接下来我们就开始解析这道面试题。我们知道 supreme boot 功能之所以强大的原因,除了自动配置提供诸多 stator 约定大于配置、 内置外部服务器等特性外,还可以通过架包的方式直接运行。如果我们要把 spring bot 应用打包成一个可运行的架包,需要依赖官方提供的一个 spring gun bot 刚 melvin gun plugin 的插件。 使用该插件在执行完 mering 的 package 命令后,塔格的目录下会生成如下两个驾保文件, application 点加点耳闻 indoor 是一个原始的价包文件,它仅包含应用程序的本地资源,是个不可运行的价包。它的目录结构如下,买者更音符存放原数据信息,比如用来描述价包信息 p 的 manifas 的点 m f 文件等。 com 文件夹,存放应用程序变异后的 class 文件接下来让我们看一下 application 点加,它是一个由 spring 杠 boot 杠埋稳杠 plugin 插件,对 application 点加点耳轮进斗 引入第三方依赖包瑞排给结后产生的可运行的价包文件。这种将应用程序的类文件和第三方依赖的价包文件打包在一起的加文件,我们称之为 fat。 加它的目录结构如下, bot 杠引爆下的 classes 文件夹存放应用程序编译后的 class 文件。 bot 杠引爆下的莱博文件夹 存放应用程序依赖的第三方价包文件。买点杠 info 文件夹存放原数据信息。 oig 文件夹存放价包启动时需要使用的 supremebod 的相关克拉斯文件默认情况下,一个可执行的价包通 通过加法杠架命令执行后,会使用 a p p classloader 类加载器来加载 mate fast 点 m f 文件中的 man 杠 class 指定的引导启动类,并执行其 man 方法。但是对于 spring boot 插件打包后的这种 fat 加 a p p class loader 则是无法成功加载的,因为它是无法加载架包中的加文件的。那么 sorry bo 的插件打包后的架包是怎么运行的呢?先让我们看一下架包中的 manifest 点 m f 文件。重点看一下第六行和第七行。 第六行中我们可以看到它的 man 杠 class 并不是我们自己开发的启动类,而是一个由 spring bott 定义的 java launcher 启动类。接下来让我们看一下该类是怎么执行的。当然,如果想在自己的项目中查看该类的原码,需要引入 spring 杠 bot 杠 loader 的依赖包。另外它的第七行设置了一 一个 style 杠 class 类,该类才是我们真正自己开发的启动类。接下来让我们看一下驾包的启动原理。首先直行加廊桥的慢方法,它会调用其副类的让其方法。 接下来咱们看一下这个啷切方法,它会首先调用 curio 的 class loader 方法创建一个 launch 的 url class loader 的类加载器,该 class loader 主要负责加载 bot 杠引爆文件夹下的 classes 下的应用程序编译后的 class 文件和 bot info 下的 level 下的应用程序依赖的第三方的驾包文件。 接着 launch 方法调用了一个它的重载方法,该方法首先会把 launch 点 u r o class loader 设置到当前县城中,接着调用了一个 carried my metal 的软点儿方法,并调用了其返回值对象的软方法。 接下来让我们看一下 carried my method runner 的执行,它通过构造方法创建了一个 my method runner 对象。 最后让我们看一下 my master 的软点儿对象的软方法是怎么执行的。 man class 内幕属性其实就是 manifas 的点 m f 文件中的 stat 杠 class 及我们自己开发的启动类。首先获取我们自己开发的启动类的类对象, 并通过反射调用该类的慢方法,这样我们自己的 spring boot 也就真正的开始启动了。 啰嗦了那么多,可能有些小伙伴对于 spring boot 中驾保启动的原理思路还不是那么清晰,没关系,让我们一起再总结一下。一、根据 spring bot 提供的 spring gun bot 杠 m n 杠 plug 插件,把应用程序打包成一个可执行的驾保文件。二、通过加法杠加命令执行该 加保文件。三、首先 g v m 还是会使用 a p p class loader 加载 manda 法则,点 m f 文件中的 manga class 及加廊桥启动类,并执行其 man。 方法四、创建一个浪缺点 url class loader 的类加载器,并设置到当前现场中。 该类加载器的作用就是负责加载 bot 杠银包文件夹下的克拉塞斯文件夹下的应用程序编译后的克拉斯文件和 bot 杠银包下的莱包下的应用程序依赖的第三方驾包文件。 五、通过反射执行获取我们自己开发的启动类的类对象,并执行其慢方法。六、开启 supreme boot 的启动流程。小伙伴们,关注威哥,更多精品内容持续与你分享!

斯布润布的项目部署简单,通过加油干架包名就可以启动了,那是因为斯布润布的项目中使用了打包插件,插件会将所有应用所需要的炸包都包含进来,这样打包完成后,就可以通过加油干炸启动了。 但是这里有一个问题,这个炸包会很大,如果环境在公网上,每次需求迭代都需要重新打包上传,上传速度会很慢,非常麻烦, 这个该怎么解决呢?我们可以将那些不变的炸包放在服务器中,每次打包忽略掉这些依赖,实现增量部署,这样咱们的炸包体积就会小很多。这是一个斯布润布的项目,只有一个接口, 并且没有很多的依赖,咱们打包一下,看一下它的体积,可以看到这个炸包大约在二十兆左右。修改一下泡沫文件,首先不打包依赖, 并且将依赖的架文件拷贝到 libe 目录下面,咱们再重新打包一下,看一眼效果。重新打包后,可以看到一个 libe 文件夹里面存放的就是依赖的炸包, 并且呢这个项目的大小也变成了一百六十七 kb, 这样上传就非常方便了。打包完成后,通过杠低 load 点 pass 指定赖布路径就可以正常启动了。最后小伙伴们还有什么更好的办法吗?评论区讨论一下。

好,我们继续。 spring boot 现在很流行,我们以它作为例子,讲讲怎么快速学习一个框架。首先,我们在网上可以查到它号称 build everything, 比如我们用它来做网站。第一,总得有个方法告知这个框架我要做网站,然后,然后你就知道他的 pom xml 配置文件了。第二,他大大讲话了,配置 直接嵌入 tomcat 作为 civilize 勇气,但如果你要配置端口呢?你又发现它可以使用 application 配置文件。第三, 他如何处理请求呢?比如来了一个 http 请求,我用某个函数去接住他,处理他,你会发现他通过注解的方式来把请求和你的函数连接起来。 好,到目前为止,你已经能写一个简单的网站后端了。然后你再看看它的几大块功能。比如,第一,它提供 n、 b、 c 的支持,你就看看怎么通过它把你的逻辑分成就行了。 第二,他支持 ioc, 不就是依赖注入吗?那你更容易创建对象。第三,他支持面向切面 aop, 不还是通过注解给函数加一些通用的功能吗?所谓依赖注入注解,我前面的视频都有讲解过,名字很吓人,但底层逻辑都是很简单的。 然后你再深入看看怎么设置现成词,以便处理更多网络请求,怎么一步编程,怎么与数据库连接在一起。然后很快你就用了这个框架了。
