springboot应用启动原理分析.docx

上传人:p** 文档编号:1062672 上传时间:2024-06-29 格式:DOCX 页数:16 大小:34.18KB
下载 相关 举报
springboot应用启动原理分析.docx_第1页
第1页 / 共16页
springboot应用启动原理分析.docx_第2页
第2页 / 共16页
springboot应用启动原理分析.docx_第3页
第3页 / 共16页
springboot应用启动原理分析.docx_第4页
第4页 / 共16页
springboot应用启动原理分析.docx_第5页
第5页 / 共16页
springboot应用启动原理分析.docx_第6页
第6页 / 共16页
springboot应用启动原理分析.docx_第7页
第7页 / 共16页
springboot应用启动原理分析.docx_第8页
第8页 / 共16页
springboot应用启动原理分析.docx_第9页
第9页 / 共16页
springboot应用启动原理分析.docx_第10页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《springboot应用启动原理分析.docx》由会员分享,可在线阅读,更多相关《springboot应用启动原理分析.docx(16页珍藏版)》请在第壹文秘上搜索。

1、springbootquickstart在springboot里彳艮吸引人的T特性是可以干脆把应用打包成为一Tjar/war,然后这个jar/war是可以干脆启动的,不须要另外配置一个WebServer.假如之前没有运用过springboot可以通过下面的demo来感受下.下面以这个工程为例,演示如何启动Springboot项目:gitclone:hengyuabcspring-boot-demo.gitmvnSpring-boot-demojava-jartargetdemo-.1-SNAPSHOT.jar123假如运用的IDE是springsts或者idea,可以通过向导来创建spring

2、boot项目。也可以参考官方教程:对SPringboot的两个疑问刚起先接触springboot时,通常会有这些疑问 springboot如何启动的? springbootembedtomcat是如何工作的?睁态文件Jsp,网页模板这些是如何加载到?下面来分析springboot是如何做到的打包为单个jar时,springboot的启动方式maven打包之后,会生成两个jar文件:dem-e.I-SNAPSHOTJardemo-0.,1-SNAPSHOTjar.original其中demo0.0.1SNAPSHOT,jar.original是默认的mavenjar-plugin生成的包.dem

3、o-0.0.1SNAPSHOTjar是springbootmaven插件生成的jar包,里面包含了应用的依靠,以及springboot相关的类.下面称之为fatjar.先来直看springboot打好的包的书目结构(不重要的省略掉):I-META-INFII-MANIFEST.MFIapplication.propertiesIcomexampleSpringBootDemoApplication-Class|aopalliance-l.jarIsprlng-beans-4getEntries():publicabstract1.istgetNestedArchives(EntryFiIter

4、filter); 1 2 3 4 5可以看到Archive有f自己的UR1.,比如:jar:-SNAPSHOTJar!/ 1还有一个QetNestedArchives函数,这个实际返回的是demo0.01-SNAPSHOT,jar/lib下面的jar的Archive列表.它们的UR1.是:jar:et0.1-snapshot.jarI/IibZaopalliance-I0.jarjar:).1-SNAPSHOT,jar!libspri11g-beans-4.2.3.RE1.EASE,jarJar1.auncher从MANIFEST.MF可以看到Main函数是Jar1.auncherr下面来分析

5、它的工作流程.Jar1.aUnCher类的继承结构是:classJar1.auncherextendsExecutableArchive1.auncherclassExecutableArchive1.auncherextends1.auncher以demo0.0。1SNAPSHOTjar创建一个ArChiVe:Jar1.aUrKher先找到自己所在的jar,即demoO.0.I-SNAPSHOTjar的路径,然后创建了一个Archive.下面的代码展示了如何从一个类找到它的加载的位置的技巧:protectedfinalArchiveCreateArChiVe()throwsException

6、(ProtectionDomainprotectIonDcxnain=getClass(),getProtectioDomain();CodeSourcecodeSource=protectionDomai11.getCodeSource():URIlocation=(codeSource=null?null;codesource.get1.ocatlon()toRIO;StringpathH(location=null?null:location.getSchemeSpecificPart();if(path-null)throwneMIIlegalStateException(wUnabl

7、etodeterminecodesourcearchive”):=new);if(!root,exists()thrownewIllegalStateException(Unabletodeterminecodesourcearchivefrom+root);return(root.isDirectory()?newExplodedArchive(root):newJar(root):) 1 2 3 4 5 6 7 8 9101415获得ib下面的jar,并创建一个1.aunchedUR1.CIass1.oaderJar1.auncher创建好Archive之后,通过getNestedArch

8、ives函数来获得到demo-0.0.1SNAPSHOT.jar/lib下面的全部jar文件,并创建为1.ist.留意上面提到,Archive都是有自己的UR1.的。获得到这些Archive的UR1.之后,也就获得了一个UR1.口数组,用这个来构造一个自定义的CIass1.oader:1.aunchedUR1.CIass1.oadere创建好CIaSS1.Oader之后,再从MANIFEST.MF里读取到Start-Class,即com.eample.SpringBootDemoApplication,然后创建一个新的线程来启动应用的Main函数./*1.aunchtheapplication

9、giventhearchiveafullyconfiguredclassloader.*/protectedvoidlaunch(Stringargs,StringmainClass,Class1.oaderClass1.oader)throwsExceptionRunnablerunner=createMainMethodRunner(mainClass.args,Class1.oader);Threadrunnerhread=newThread(runner);runnerThread.SetcontextClass1.oader(Class1.oader):runerThreadoSet

10、Name(ThreadcurrentThread().getNameO);runerThread,.start();)/*CreatethecodeMainMethodRunnerJusedtolaunchtheapplication.*/protectedRunnablecreateMainMethodRunner(StringmaiClass.Stringargs.Class1.oaderClass1.oader)throwsException(Class?)runnerlass=Class1.oader.IoadClass(RUNNEReC1.ASS):Constructor?)constructorrunnerdass.getConstructor(String,class,String.class);return(Runnable)constructornewlnstancemaiClass.args):)12 5 6 7 8

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 管理/人力资源 > 咨询培训

copyright@ 2008-2023 1wenmi网站版权所有

经营许可证编号:宁ICP备2022001189号-1

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!