一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺析Spring Boot中的spring-boot-load模塊

淺析Spring Boot中的spring-boot-load模塊

2021-03-27 11:38并發編程網 Java教程

spring-boot-loader模塊允許我們使用java -jar archive.jar運行包含嵌套依賴jar的jar或者war文件,它提供了三種類啟動器。下面通過本文給大家介紹spring-boot-load模塊的相關知識,感興趣的朋友一起看看吧

一、前言

正常情況下classloader只能找到jar里面當前目錄或者文件類里面的*.class文件。為了能夠加載嵌套jar里面的資源之前都是把嵌套jar里面的class文件和應用的class文件打包為一個jar,這樣就不存在嵌套jar了,但是這樣做就不能很清晰的知道應用到底依賴了哪些東西,哪些是應用自己的,另外多個jar里面的class可能內容不一樣但是文件名卻一樣。springboot中spring-boot-loader就是為優雅解決這個問題而誕生的。

spring-boot-loader模塊允許我們使用java -jar archive.jar運行包含嵌套依賴jar的jar或者war文件,它提供了三種類啟動器 (JarLauncher, WarLauncher and PropertiesLauncher),這些類啟動器的目的一樣都是為了能夠加載嵌套在jar里面的資源(比如class文件,配置文件等)。[Jar|War]Launcher固定去查找當前jar的lib目錄里面的嵌套jar文件里面的資源。

二、spring-boot-loader模塊提供的jar目錄結構

Springboot中jar文件格式固定如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
archive.jar
 |
 +-META-INF(1
 | +-MANIFEST.MF
 +-org(2
 | +-springframework
 | +-boot
 | +-loader
 |  +-<spring boot loader classes>
 +-com(3
 | +-mycompany
 | + project
 | +-YouClasses.class
 +-lib(4
 +-dependency1.jar
 +-dependency2.jar
  • 結構(1)jar文件中MANIFEST.MF文件存放處
  • 結構(2) Spring-boot-loader本身需要的class放置處
  • 結構(3) 應用本身的文件放置處
  • 結構(4)應用依賴的jar固定放到lib目錄。

那么spring-boot是如何去按照這個結構加載資源那?

  • 首先在打包時候會使用spring-boot-maven-plugin插件重寫打成的jar文件,會設置META-INF/MANIFEST.MF中的
?
1
2
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.mycompany.project.MyApplication

并拷貝spring-boot-loader包里面的class文件到結構(2),應用依賴拷貝到(4)應用類拷貝到(3)

  • 通過java -jar archive.jar 運行時候Launcher會去加載JarLauncher類并執行其中的main函數,JarLauncher主要關心構造一個合適的URLClassLoader加載器用來調用我們應用程序(MyApplication)的main方法。

三、spring-boot-maven-plugin插件打包流程分析

淺析Spring Boot中的spring-boot-load模塊 

注:這里需要思考下為何要拷貝本來應該放入到lib里面的spring-boot-loader.jar里面的class到結構(2)?

四、JarLauncher執行流程分析

淺析Spring Boot中的spring-boot-load模塊 

看完這個流程在分析下第三節留的問題,如流程圖首先使用Appclassloader加載了JarLauncher類并創建了LaunchedURLClassLoader類,而LaunchedURLClassLoader是屬于spring-boot-loader.jar包里面的,而Appclassloader是普通的加載器不能加載嵌套的jar里面的文件,所以如果把spring-boot-loader.jar放到lib 目錄下,Appclassloader將找不到LaunchedURLClassLoader。所以在打包時候

拷貝本來應該放入到lib里面的spring-boot-loader.jar里面的class到結構(2)。

五、總結

spring-boot-load模塊通過自定義jar包結構自定義類加載器優雅的實現了嵌套jar資源的加載,通過打包時候重新設置啟動類和組織jar結構,通過運行時設置自定義加載器來實現嵌套jar資源加載。

原文鏈接:http://ifeve.com/spring-boot-loader/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91天堂素人97年清纯嫩模 | 91精品婷婷国产综合久久8 | 秋霞在线观看成人高清视频51 | videosxxxx老女人 | 男人j进女屁股视频在线观看 | 狠狠色婷婷日日综合五月 | 亚洲欧美精品久久 | 精品牛牛影视久久精品 | 国产成人99精品免费观看 | 国产精品九九免费视频 | 欧美图片另类小说综合 | 日韩去日本高清在线 | 国色天香社区视频免费高清在线观看 | 韩国三级年轻小的胰子完整 | 我与么公激情性完整视频 | 爱福利视频一区二区 | 奇米久草 | 日韩高清一区二区三区不卡 | 我们日本在线观看免费动漫下载 | 四虎国产成人亚洲精品 | 日韩在线一区 | 国产亚洲精品综合在线网址 | 天天干天天操天天爽 | juliaann大战七个黑人 | 男人插曲女人下面 | 丝瓜视频黄瓜视频 | 鬼吹灯之天星术免费观看 | 高h全肉动漫在线观看免费 高h辣h双处全是肉军婚 | 日本三级在丈面前被耍了 | 超级碰在线视频 | 亲爱的客栈第二季免费观看完整版 | 亚洲国产精品成人综合久久久 | 女性全身裸露无遮挡 | 国产拍拍视频一二三四区 | 饭冈加奈子在线播放观看 | 金莲你下面好紧夹得我好爽 | 美女的让男人桶爽免费看 | 四虎影视在线影院在线观看观看 | 2020年精品国产午夜福利在线 | 亚州人成网在线播放 | 白丝校花掀起短裙呻吟小说 |