【SpringApplication】源码之【StackWalker】

 问题SpringBoot是如何找到main方法的启动类的? 

 我们在SpringApplication 275行看到有一个“探测Main”的方法,其中他使用了Java 9 的新特性: StackWalker。

图1

StackWalker能够允许通过程序去访问方法调用栈,比我们经常看到的StackTrace要更加强大,在方法3处,即通过寻找调用链路中方法名为"main"的定义类来获取"MainApplicationClass".

不过作为"抬杠小能手"的我们,会发现这样寻找并不严谨,比如我们自己定义如下的启动方式:

 图2

我们心理扭曲的使用了另外一个main方法来启动SpringApplication,然后通过StackWalker首先探测到的是我们自定义的MyMainCall类而不是SpringBootApplication,因为Stack是从栈顶向下遍历。

 图3

当然这样做纯粹是没事找抽型的,而且这个mainApplicationClass本身并不是什么关键性的变量,也不会引起不适。

posted @ 2023-01-22 12:16  铁将四海  阅读(71)  评论(0)    收藏  举报