SpringBoot-启动过程源码解析
SpringBoot VERSION:2.1.x
这里使用的是Spring Boot 官方自带的Spring Boot Sample - SampleTomcatApplication。
启动前先设置参数:
启动类被 @SpringBootApplication
注解修饰。跟踪run
方法,我们可以看到跳转进入了SpringApplication
类中:
继续往下:
新建SpringApplication实例
可以看到,new了一个SpringApplication出来,看下SpringApplication
的构造函数:
1.设置primarySources
,用于存储配置类
可以看到,这里就是将启动类的Class对象塞了进去。
2.根据类路径推断容器类型:
ClassUtils.isPresent
方法中首先校验是否为基本类型、常用类型,如果是则返回;否则根据前后缀名校验是否为Array,不是则调用 Class.forName
尝试加载指定名称的类。
3.设置应用上下文初始器
尝试获取线程上下文类加载器,如果没获取到则依次获取获取当前类类加载器、系统类加载器。
通过加载META-INF/spring.factories
配置文件获取到制定类的实现类类名,然后通过反射实例化对象。由于所有的对象都实现了ordered
接口,所以可以将对象排序后返回。