先看看SpringBoot的主配置类的main方法:

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_spring

main方法运行了一个run()方法,进去run方法看一下:

/**
  * 静态帮助程序,可用于从中运行{@link SpringApplication}
  * 使用默认设置指定来源。
  * @param primarySource加载的主要源
  * @param args应用程序参数(通常从Java  main方法传递)
  * @返回正在运行的{@link ApplicationContext}
  */
public static ConfigurableApplicationContext run(Class<?> primarySource,
			String... args) {
	return run(new Class<?>[] { primarySource }, args);
}

我们可以看到run方法注释上写了使用了默认的设置,这些默认的设置就是从Application启动类上面的注解

@SpringBootApplication 中来的。

并且run方法返回了一个正在运行的上下文对象:

ApplicationContext

 

进入注解@SpringBootApplication中可以看到:

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_自动装配_02

注解中默认的四个方法不用关注。

 

先看看@ComponentScan 这个注解,它是当容器启动的时候,用来扫描启动类底下所有的类以及所有子包下面的类。

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_自动装配_03

再看看@SpringBootConfiguration这个注解,可以看到它是一个接口,上面有一个@Configuration注解,说明它是一个容器。

从Spring3.0开始,@Configuration用于定义配置类,可替换xml配置文件,@Configuation等价于<Beans></Beans>。

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_自动装配_04

接着看@EnableAutoConfiguration,这是用来开启自动装配的注解。

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_spring_05

进入@EnableAutoConfiguration,看到一个@Import,点进去看,注释说明这是用来导入@Configuration的。

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_main方法_06

@Import的入参  AutoConfigurationImportSelector.class是一个选择器(Selector),用于选择自动装配的类。

 

进入选择器AutoConfigurationImportSelector,可以看到它调用了一个获取自动装配实体的方法:

getAutoConfigurationEntry

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_自动装配_07

进入获取自动装配实体的方法( getAutoConfigurationEntry ),可以看到它调用了一个获取默认配置的方法,返回值是一个字符串列表。这里把它成为:默认的配置列表。

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_main方法_08

进入getCandidateConfigurations方法中,通过断言可以知道配置信息是从 

META-INF/spring.factories

中来的。最终它们是一个字符串类型的List。

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_spring_09

通过IDEA软件的定位功能,可以找到当前方法getCandidateConfigurations所在jar包。

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_spring_10

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_spring_11

打开spring.factories文件,可以看到springBoot为用户实现的大量自动装配的类:

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_spring_12

找到 EmbeddedWebServerFactoryCustomizerAutoConfiguration ,可以看到SpringBoot为用户内置的Tomcat

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_自动装配_13

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_main方法_14

最后看下spring.factories文件配置的自动装配类@ServletWebServerFactoryAutoConfiguration,在这里Tomcat被启动了。

springboot 查看mysql 版本 如何查看springboot内置tomcat版本_自动装配_15