再谈Spring Boot的启动

版权声明: https://blog.csdn.net/Dongguabai/article/details/83583213

之前在这篇博客https://blog.csdn.net/Dongguabai/article/details/80865599中已经分析过了一部分,今天又发现了一个与Spring Boot启动相关的好玩的东东。

比如一般Spring Boot启动main()方法如下:

可以发现这里new了一个SpringApplication,再往下看:

这里为一个很重要的属性mainApplicationClass赋值,并调用的deduceMainApplicationClass()方法,可以看看这个方法:

这个方法很有趣,也很简单,就是获取当前栈,如果方法名称是main,那么就把这个类作为主类。当然Spring Boot的这个方法写的还是不够严谨,因为还可能会有别的方法也叫main,但是更坑爹的就是在StackTraceElement类中只有methodName,而Java的方法是可以重载的:

可以简单写个main()方法测试一下:

输出结果:

这个方法如果经过进一步扩展可以实现一个进程再控制多个进程,即实现进程管理器。比如我们使用idea,启动Java程序就相当于是在idea这个进程中又启动了一个Java进程。

猜你喜欢

转载自blog.csdn.net/Dongguabai/article/details/83583213