springboot应用启动原理分析.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

springboot应用启动原理分析

springboot应用启动原理分析

PAGE/NUMPAGES

springboot应用启动原理分析

springbootquickstart

在springboot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个WebServer。

如果之前没有使用过springboot可以通过下面的demo来感受下。?

下面以这个工程为例,演示如何启动Springboot项目:

gitclone:hengyunabc/spring—boot—demo。git

mvnspring-boot-demo

java—jartarget/demo—0。0.1—SNAPSHOT.jar

1

2

3

如果使用的IDE是springsts或者idea,可以通过向导来创建springboot项目。

也可以参考官方教程:?

HYPERLINK”\l”getting—started-first-application”\t”_blank\l”getting—started—first—application\t_blank”

原始的Jar是这样子的:

jar:0.0。1-SNAPSHOT。jar!/

1

jar包里的资源的URL:

jar:0。0。1—SNAPSHOT.jar!/com/example/SpringBootDemoApplication.class

1

可以看到对于Jar里的资源,定义以’!/来分隔.原始的Jar只支持一个’!/。

Springboot扩展了这个协议,让它支持多个’!/’,就可以表示jarinjar,jarindirectory的资源了。

比如下面的URL表示demo—0.0。1—SNAPSHOT.jar这个jar里lib目录下面的spring-beans—4。2。3.RELEASE。jar里面的MANIFEST。MF:

jar:0。0。1—SNAPSHOT.jar!/lib/spring—beans—4.2。3.RELEASE.jar!/META-INF/MANIFEST.MF

1

自定义URLStreamHandler,扩展Jar

在构造一个URL时,可以传递一个Handler,而JDK自带有默认的Handler类,应用可以自己注册Handler来处理自定义的URL。

publicURL(Stringprotocol,

Stringhost,

intport,

Stringfile,

URLStreamHandlerhandler)

throwsMalformedURLException

1

2

3

4

5

6

参考:?

HYPERLINK”\l”URL-java。lang。String—java.lang.String-int—java。lang.String—\l”URL—java。lang.String—java.lang。String-int—java.lang。String—”\t”_blank

Springboot通过注册了一个自定义的Handler类来处理多重jarinjar的逻辑。

这个Handler内部会用SoftReference来缓存所有打开过的JarFile。

在处理像下面这样的URL时,会循环处理!/’分隔符,从最上层出发,先构造出demo-0。0.1-SNAPSHOT。jar这个JarFile,再构造出spring-beans—4.2.3.RELEASE。jar这个JarFile,然后再构造出指向MANIFEST.MF的JarURLConnection。

jar:0.0.1—SNAPSHOT。jar!/lib/spring—beans-4。2.3。RELEASE.jar!/META-INF/MANIFEST。MF

1

//org。springframework。boot.loader。jar。Handler

publicclassHandlerextendsURLStreamHandler{

privatestaticfinalStringSEPARATOR=!/;

privatestaticSoftReferenceMap〈File,JarFile〉root;

@Override

protectedURLConnectionopenConnection(URLurl)throwsIOException

文档评论(0)

136****6482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档