• 满足什么样的条件?因为我们引入了 spring-boot-starter-web 依赖。
  • 创建哪些 Bean?创建了一个内嵌的 Tomcat Bean,并进行启动。
  • 创建的 Bean 的属性?通过 application.yaml 配置文件的 server.port 配置项,定义 Tomcat Bean 的启动端口属性,并且默认值为 8080。

1. EmbeddedWebServerFactoryCustomizerAutoConfiguration 类 负责创建内置tomcat jetty等web服务器的配置类

1.1 配置类

TomcatWebServerFactoryCustomizerConfiguration 配置类,负责创建 TomcatWebServerFactoryCustomizer Bean,从而初始化内嵌的 Tomcat 并进行启动。

JettyWebServerFactoryCustomizer 配置类,负责创建 JettyWebServerFactoryCustomizer Bean,从而初始化内嵌的 Jetty 并进行启动。

 @Configuration 注解的配置类,可以解决“创建哪些 Bean”的问题。

在我们通过 SpringApplication#run(Class<?> primarySource, String... args) 方法,启动 Spring Boot 应用的时候,有个非常重要的组件 SpringFactoriesLoader 类,会读取 META-INF 目录下的 spring.factories 文件,获得每个框架定义的需要自动配置的配置类

原先 @Configuration 注解的配置类,就升级成类自动配置类。这样,Spring Boot 在获取到需要自动配置的配置类后,就可以自动创建相应的 Bean,完成自动配置的功能。

我们可以把 spring.factories 理解成 Spring Boot 自己的 SPI 机制

 

1.2  条件注解

@ConditionalOnWebApplication 

 @ConditionalOnClass

通过条件注解,可以解决“满足什么样的条件?”的问题

1.3 配置属性

@EnableConfigurationProperties 

@ConfigurationProperties 

在创建 TomcatWebServerFactoryCustomizer 和 JettyWebServerFactoryCustomizer 对象时,都会将 ServerProperties 传入其中,作为后续创建的 Web 服务器的配置。也就是说,我们通过修改在配置文件的配置项,就可以自定义 Web 服务器的配置。

通过配置属性,可以解决“创建的 Bean 的属性?”的问题。

 

springboot自动配置学习笔记

相关文章: