可以说Springboot是Java程序员的必不可少的技能。每个人都知道Springboot最终可以使用Maven制作罐装袋,然后使用该命令运行Web工程(或其他)。通过这种方式,避免了基于Tomcat的Web项目的复杂操作。SpringBoot可以使部署能够部署Web服务仅仅是因为它具有构建的码头(或tomcat)服务器,并且在容器激活过程中成功运行了Web服务期间服务器的启动。
本文不是构建服务器的启动过程,但是Springboot到底做了什么?它如何与我们经常使用@springbootapplication编写的主方法类捆绑在一起?
我相信Springbooter不能不熟悉以下代码。无论是Springboot的新同学,还是开始研究Springboot源代码的新驱动程序,此代码几乎是我们的立足点。我们非常熟悉它,以至于这是Springboot的起点这个Magic Park.ut.ut真的这样吗?
我们都知道,在包装Java项目后,该JAR软件包的输入说明写在文件下。让我们看一下此文件内容:
文件入口描述了与主类相对应的值,也就是说,我们需要查看此类究竟做了什么?
显然,主要功能吸引了我们的注意力,是的,这是入口,并且没有代码可以看到Jarlauncher的空气结构。我们首先寻找父亲的班级:
从代码可以看出,真正完成的父类是它在初始化过程中构造了一个存档实例,该实例封装了文件的信息。我们稍后还将使用它。
后来是启动方法。我们只有核心执行过程:
这是子类executablearchivelancher的GetMainClass方法。主要逻辑是从文件中获取起始类信息,上面的相应是字符串,以便它与我们编写的启动类关联。
然后是启动方法的特定执行。启动()首先创建一个mainmethodrunner,以传递上面获得的起始类和传输参数,然后调用Mainmethodrunner的运行方法。运行方法的执行也非常简单,即与开始 - 启动 - 相对应的启动类别类,然后反映启动类的维护。然后是容器的初始化过程。
总而言之,对于Springboot项目,启动类不是真正的项目入口。实际条目反思将召集他以实现弹簧容器的启动。项目入口也是我们为我们提供的“弹簧开发人员”的“插图”,即抽象的逻辑入口。
原始:https://juejin.cn/post/7100386958580563982