欢迎来到第壹文秘! | 帮助中心 分享价值,成长自我!
第壹文秘
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 第壹文秘 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    springboot应用启动原理分析.docx

    • 资源ID:1062672       资源大小:34.18KB        全文页数:16页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    springboot应用启动原理分析.docx

    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,可以通过向导来创建springboot项目。也可以参考官方教程:对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生成的包.demo-0.0.1SNAPSHOTjar是springbootmaven插件生成的jar包,里面包含了应用的依靠,以及springboot相关的类.下面称之为fatjar.先来直看springboot打好的包的书目结构(不重要的省略掉):I-META-INFII-MANIFEST.MFIapplication.propertiesIcomexampleSpringBootDemoApplication-Class|aopalliance-l.jarIsprlng-beans-4<2,3。RElEASEJarI.org1 springframework1- boot,loaderExecutableArchive1.auncher.classJar1.aucher.classIDavaAgentDetector,class1.aunchedUR1.Class1.oader.classI1.auncherxlassIMainMethodRunner.class9101112131415161718192021依次来看下这些内容。MANIFEST.MFHanifest-Version:1Start-Class:com.example.SpringBootDemoApplicationImplementation-Vendor-Id:com.exampleSpring-Boot-Version;1。3.(RE1.EASECreated-By:Build-Jdk:1.86Implementatiorv-Vendor:PivotalSoftware.Inc.Main-Class:orgSpringframework.boot.loader.Jar1.auncher12345678可以看至!J有Main-Class是org.springframework.boot.loader.Jar1.auncherr这个是jar启动的Main函数.还有一个StartClass是com.e×ampleSPringBootDemOAPPIiCation,这个是我彳口应用自己的Main函数.SpringBootApplicationpublicclassSpringBootDemoApplicationpublicstaticvoidmain(StringIIargs)SpringApplication.run(SpringBootDeffloApplication.class,args);) 3 4 5 6 7com/example书目这下面放的是应用的.class文件.Iib书目这里存放的是应用的Maven依靠的jar包文件.比如springbeans,SPring-mvc等jar.org/springframework/boot/loader书目这下面存放的是Springbootloader的.class文件.Archive的概念 archive即归档文件,这个概念在IinUX下册5常见 通常就是ftar/zip格式的压缩包 jar是ZiP格式在springboot里,抽象出了Archive的蟋.一个archive可以是一个jar(Jar),也可以是一个文件书目(ExpIodedArchive).可以理解为Springboot抽象出来的统一访问资源的层.上面的demo0。Ol-SNAPSHOTjar是一个ArChiVe,砺demo-0。O.l-SNAPSHOT.jar里的/Iib书目下面的每一个Jar包,也是一个ArChiVe.publicabstractclassArchivepublicabstractUR1.getUrl();publicStringgetMainClass():publicabstractCollection(Entry>getEntries():publicabstract1.ist<Archive>getNestedArchives(EntryFiIterfilter); 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-I>0.jarjar:).1-SNAPSHOT,jar!libspri11g-beans-4.2.3.RE1.EASE,jarJar1.auncher从MANIFEST.MF可以看到Main函数是Jar1.auncherr下面来分析它的工作流程.Jar1.aUnCher类的继承结构是:classJar1.auncherextendsExecutableArchive1.auncherclassExecutableArchive1.auncherextends1.auncher以demo0.0。1SNAPSHOTjar创建一个ArChiVe:Jar1.aUrKher先找到自己所在的jar,即demoO.0.I-SNAPSHOTjar的路径,然后创建了一个Archive.下面的代码展示了如何从一个类找到它的加载的位置的技巧:protectedfinalArchiveCreateArChiVe()throwsException(ProtectionDomainprotectIonDcxnain=getClass(),getProtectioDomain();CodeSourcecodeSource=protectionDomai11.getCodeSource():URIlocation=(codeSource=null?null;codesource.get1.ocatlon()toRIO>;StringpathH(location=null?null:location.getSchemeSpecificPart();if(path-null)throwneMIIlegalStateException(wUnabletodeterminecodesourcearchive”):=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之后,通过getNestedArchives函数来获得到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.e×ample.SpringBootDemoApplication,然后创建一个新的线程来启动应用的Main函数./*1.aunchtheapplicationgiventhearchiveafullyconfiguredclassloader.*/protectedvoidlaunch(Stringargs,StringmainClass,Class1.oaderClass1.oader)throwsExceptionRunnablerunner=createMainMethodRunner(mainClass.args,Class1.oader);Threadrunnerhread=newThread(runner);runnerThread.SetcontextClass1.oader(Class1.oader):runerThreadoSetName(ThreadcurrentThread().getNameO);runerThread,.start();)/*Createthe©codeMainMethodRunnerJusedtolaunchtheapplication.*/protectedRunnablecreateMainMethodRunner(StringmaiClass.Stringargs.Class1.oaderClass1.oader)throwsException(Class<?)runner<lass=Class1.oader.IoadClass(RUNNEReC1.ASS):Constructor<?)constructorrunnerdass.getConstructor(String,class,String.class);return(Runnable)constructornewlnstancemaiClass.args):)12 5 6 7 8

    注意事项

    本文(springboot应用启动原理分析.docx)为本站会员(p**)主动上传,第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第壹文秘(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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

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

    收起
    展开