上篇文章SpringBoot自动装配原理解析中,我们分析了SpringBoot的自动装配原理以及
@SpringBootApplication注解的原理,本篇文章则继续基于上篇文章中的main方法来分析SpringApplication这个类
1 |
|
点击run方法一路跟踪下来,发现首先做的是实例化SpringApplication对象实例
1 | public static ConfigurableApplicationContext run(Class<?> primarySource, |
首先看一下
deduceWebApplicationType方法
1 | private WebApplicationType deduceWebApplicationType() { |
大抵意思就是根据当前项目中是否存在上方的几个类来推断出当前的web环境,这里因为SpringBoot默认使用的web框架是SpringMVC,所以最后返回结果为WebApplicationType.SERVLET
加载所有的
ApplicationContextInitializer和ApplicationListener的实现类
1 | private <T> Collection<T> getSpringFactoriesInstances(Class<T> type, Class<?>[] parameterTypes, Object... args) { |
可以看到主要还是用的SpringFactoriesLoader这个类去加载这两个接口的实现类,加载到类以后使用反射的方式构造出这些类的实例,然后根据这些实现类上的Order注解的值进行排序
关于这些实现类的具体作用请关注后续的文章
最后一行的意义是找到入口方法main所在的类,赋值给全局变量
mainApplicationClass
往期好文

如果文章对您有所帮助,收藏、转发、在看安排一下!!!
本文深入剖析SpringBoot启动过程,从SpringApplication实例化开始,详细解读自动配置、环境判断及初始化器与监听器加载机制,适合希望深入了解SpringBoot内部工作原理的开发者。
1760

被折叠的 条评论
为什么被折叠?



