构造SpringApplication对象
1、推测web应用类型
- 如果项目依赖中存在org.springframework.web.reactive.DispatcherHandler,并且不存在 org.springframework.web.servlet.DispatcherServlet,那么应用类型为WebApplicationType.REACTIVE
- 如果项目依赖中不存在org.springframework.web.reactive.DispatcherHandler,也不存在 org.springframework.web.servlet.DispatcherServlet,那么应用类型为WebApplicationType.NONE
- 否则,应用类型为WebApplicationType.SERVLET
2、获取BootstrapRegistryInitializer对象
-
从"META-INF/spring.factories"中读取key为BootstrapRegistryInitializer类型的扩展点,并实例化出对应扩展点 对象
-
BootstrapRegistryInitializer的作用是可以初始化BootstrapRegistry
-
上面的DefaultBootstrapContext对象就是一个BootstrapRegistry,可以用来注册一些对象,这些对象可以用在从SpringBoot启动到Spring容器初始化完成的过程中
-
我的理解:没有Spring容器之前就利用BootstrapRegistry来共享一些对象,有了Spring容器之后就利用Spring容器来共享一些对象
3、获取ApplicationContextInitializer对象
-
从"META-INF/spring.factories"中读取key为ApplicationContextInitializer类型的扩展点,并实例化出对应扩展 点对象
-
顾名思义,ApplicationContextInitializer是用来初始化Spring容器ApplicationContext对象的,比如可以利用 ApplicationContextInitializer来向Spring容器中添加ApplicationListener
4、获取ApplicationListener对象
1. 从"META-INF/spring.factories"中读取key为ApplicationListener类型的扩展点,并实例化出对应扩展点对象
2. ApplicationListener是Spring中的监听器,并不是SpringBoot中的新概念,不多解释了
5、推测出Main类
(main()方法所在的类)
没什么具体的作用,逻辑是根据当前线程的调用栈来判断main()方法在哪个类,哪个类就是Main类