如何看springboot版本(如何查看springboot内置tomcat版本),新营销网红网本栏目通过数据整理汇集了如何看springboot版本(如何查看springboot内置tomcat版本)相关信息,下面一起看看。

  前面给大家介绍了跳羚启动的核心流程,本文开始给大家详细的来介绍跳羚启动中的具体实现的相关细节。

   SpringBoot2.png

  春天应用构造器首先我们来看下在春天应用的构造中是如何帮我们完成这四个核心操作的。

   image.png

   1 @SuppressWarnings({ unchecked , raw types })2公共spring应用程序(资源加载器资源加载器,类?主要来源){3 //传递的资源加载器为空4这个。资源加载器=资源加载器;5 Assert.notNull(primarySources, primarySources不得为null’);6 //记录主的配置类名称7这个。主源=新链接的哈希集(数组。aslist(主要来源));8 //记录当前项目的类型9这个。webapplicationtype=webapplicationtype。deducefromcasspath();10 //加载配置在春天。工厂文件中的ApplicationContextInitializer对应的类型并实例化11 //并将加载的数据存储在了初始值设定项成员变量中12 set initializer((集合)getSpringFactoriesInstances(applicationcontextinitializer。类));13 //初始化监听器并将加载的监听器实例对象存储在了听众成员变量中14 set listeners((集合)getSpringFactoriesInstances(应用程序监听器。类));15 //反推主要的所在的班级对象并记录在了mainApplicationClass对象中16这个。mainapplicationclass=deduceMainApplicationClass();17 }应用程序类型首先来看下网应用程序类型是如何来推导出当前启动的项目的类型。通过代码可以看到是通过deduceFromClassPath()根据类路径来推导出来的。

   1这个。webapplicationtype=webapplicationtype。deducefromcasspath();跟踪进去看代码

  在看整体的实现逻辑之前,我们先分别看两个内容,第一就是在上面的代码中使用到了相关的静态变量。

   image.png

  这些静态变量其实就是一些绑定的爪哇类的全类路径。第二个就是ClassUtils.isPresent(),该的逻辑也非常简单,就是通过反射的方式获取对应的类型的班级对象,如果存在返回没错,否则返回错误的

   image.png

  所以到此推导的逻辑就非常清楚了

   image.png

   2.setInitializers然后我们再来看下如何实现加载初始化器的。

   1//加载配置在春天。工厂文件中的ApplicationContextInitializer对应的类型并实例化2 //并将加载的数据存储在了初始值设定项成员变量中3个setInitializers(集合)getSpringFactoriesInstances(application context初始值设定项。类));首先所有的初始化器都实现了ApplicationContextInitializer接口,也就是根据这个类型来加载相关的实现类。

  然后加载的关键是getSpringFactoriesInstances()。该会加载春天。工厂文件中的键为org。spring框架。语境。应用上下文初始值设定项的值。

  弹簧靴项目下

   1#应用程序上下文初始化S2组织。spring框架。语境。applicationcontext初始值设定项=3 org。spring框架。靴子。语境。configurationwarningsapplicationcontext初始值设定项,4 org。spring框架。靴子。语境。contextidapplicationcontextinitia

  lizer,5org.springframework.boot.context.config.DelegatingApplicationContextInitializer,6org.springframework.boot.rsocket.context.RSocketPortInfoApplicationContextInitializer,7org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer

  spring-boot-autoconfigure项目下

  1# Initializers2org.springframework.context.ApplicationContextInitializer=3org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,4org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

  image.png

  具体的加载 为 `getSpringFacotiesInstance()` ,我们进入查看

   先进入SpringFactoriesLoader.loadFactoryNames(type, classLoader)中具体查看加载文件的过程.

  image.png

   然后我们来看下 loadSpringFactories

  image.png

   通过Debug的方式查看会更清楚哦

  image.png

   通过 loadSpringFactories 我们看到把 spring.factories文件中的所有信息都加载到了内存中了,但是我们现在只需要加载ApplicationContextInitializer类型的数据。这时我们再通过 getOrDefault() 来查看。

  image.png

   进入 中查看

  image.png

   然后会根据反射获取对应的实例对象。

  image.png

  image.png

   好了到这其实我们就清楚了getSpringFactoriesInstances 的作用就是帮我们获取定义在 META-INF/spring.factories文件中的可以为ApplicationContextInitializer 的值。并通过反射的方式获取实例对象。然后把实例的对象信息存储在了SpringApplication的 initializers属性中。

  image.png

  3.setListeners

   清楚了 setInitializers() 的作用后,再看 setListeners() 就非常简单了,都是调用了getSpringFactoriesInstances ,只是传入的类型不同。也就是要获取的 META-INF/spring.factories文件中定义的不同信息罢了。

  image.png

   即加载定义在 META-INF/spring.factories文件中声明的所有的监听器,并将获取后的监听器存储在了 SpringApplication的 listeners属性中。

  image.png

   默认加载的监听器为:

  image.png

  4.mainApplicationClass

   最后我们来看下duduceMainApplicaitonClass() 是如何反推导出main 所在的Class对象的。通过源码我们可以看到是通过 StackTrace来实现的。

  1StackTrace:2我们在学习函数调用时,都知道每个函数都拥有自己的栈空间。3一个函数被调用时,就创建一个新的栈空间。那么通过函数的嵌套调用最后就形成了一个函数调用堆栈

   StackTrace其实就是记录了程序 执行的链路。通过Debug方式可以更直观的来呈现。

  image.png

   那么相关的调用链路我们都可以获取到,剩下的就只需要获取每链路判断执行的 名称是否是 main就可以了。

  image.png

   好了到此相关的4个核心步骤就给大家分析完了,希望对大家能有所帮助哦!

   相关文章

  豪杰超级解霸(还记得豪杰超级解霸吗?)

  龚自珍的资料(清代诗人龚自珍一生功绩简介)

  象牙塔是什么意思(“象牙塔”里怎么了?)

  水色风信子(水培风信子容易养)

  婧字怎么读

  虞姬是哪里人(古代著名美人虞姬到底是哪里人?)

  公办三本院校(我们还有哪些“三本”?)

  电子酒柜(酒柜最全选购指南)

  德州景点(德州市景区景点62个)

  玉兰油官方网(OLAY发布高端臻粹系列)

  驱鬼咒语(道教辟邪的神咒)

  奥运五环代表什么(奥运会五环代表着什么?)

  更多如何看springboot版本(如何查看springboot内置tomcat版本)相关信息请关注本文章,本文仅仅做为展示!