springboot源码深度解析 springboot源码怎么看( 二 )


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个核心步骤就给大家分析完了,希望对大家能有所帮助哦!