SpringBoot启动原理

spring boot的启动流程

一、初始化SpringAppliaction对象

image
1. 设置应用的容器类型

当前的web应用类型webApplicationType)是在SpringApplication构造函数中设置的,设置的逻辑在WebApplicationType.deduceFromClasspath中:

image

   return WebApplicationType.SERVLET;

可以看出SpringBoot将应用程序分为三种类型:

  1. Reactive
    Spring团队推出的Reactor编程模型的非阻塞异步Web编程框架WebFlux
  2. Servlet
    基于J2EE Servlet API的编程模型,运行在Servlet容器上
  3. None
    非Web应用程序

通过类路径中是否存在WebFlux中的DispatcherhandlerSpringMVC中的DispatcherServletServletConfigurableWebApplicationContext来推断Web应用程序类型

2. 收集加载资源(比如ApplicationContextInitializer、ApplicationListener)

A. 将ApplicationContextInitializer在spring.factories文件中对应的类全部实例化。

B. 将ApplicationListener在spring.factories文件中对应的类全部实例化。

image

image
    public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
image

image

image

image
image

二 、run()方法

1. 创建并配置当前Spring Boot应用将要使用的Environment,加载application.yml文件

通过遍历ApplicationListener所有实例,真正实现加载application.yml文件的是org.springframework.boot.context.config.ConfigFileApplicationListenter

image

image
image
image
image
image
2. 根据环境创建对应容器

printBanner()打印springboot旗帜

image
3. 将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的IoC容器配置加载到已经准备完毕的ApplicationContext

启动类中@SpringBootApplication是个组合注解,即

  1. @Configuration

    声明当前类是一个配置类,相当于xml文件。

  2. @ComponentScan

    自动扫描需要装配的类,并自动装配到Spring的Bean容器中

  3. @EnableAutoFiguration

在EnableAutoConfiguration中定义了两个属性

a. exclude和excludeName,用来排除一个自动配置的类

b. 最关键的是@import(EnableAutoConfigurationImportSelector.class)

@import的作用是导入一个或多个配置类。EnableAutoCongigurationImportSelector实现了 ImpostSelector接口,这个接口中定义了 selectImport方法,这个方法是用来扫描并返回需要导入的类的。

selectImports方法是去获取自动配置类的,里面最重要的一行代码就是getCandidateConfiguration方法。

这个getCandidateConfiguration方法会返回EnableAutoConfiguration类,是通过SpringFactoriesLoader.loadFactoryNames来实现的。

这个方法里就会读取classpath下所有META-INF/spring.factories文件中的配置,然后返回一个字符串数组。里面就定义了很多自动配置的类,把这些信息读取到并返回之后,就会把这些XxxAutoConfiguration注入到Spring容器中。

image
image
image

image
image
image
image
image

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容