SpringBoot的自动配置流程
在主启动类上添加了@SpringBootApplication注解
@SpringBootApplication这个注解组合了@EnableAutoConfiguration注解(顾名思义,中文翻译就是启用自动配置)
@EnableAutoConfiguration注解又组合了我们的@Import注解(怎么样,熟悉吗,import ...),并且导入了AutoConfigurationImportSelector这个类
而AutoConfigurationImportSelector这个类呢,实现了selectImports这个方法,selectImports这个方法经过一层一层的调用,最终会读取META-INF目录下后缀名为imports的文件(这里要注意SpringBoot2.7以前的版本是读取的spring.factories文件)
在读取到全类名之后,会解析注册条件,也就是@Conditional以及其衍生的注解,把满足注册条件的Bean对象自动注入到IOC容器中
以ServletWebServerFactoryAutoConfiguration为例
这个类上面的条件注解,就是生效的条件,比如说是web应用,Servlet等等时就会生效
@Import注解导入的东西是Tomcat,Jetty,Undertow一些web容器
BeanPostProcessorsRegistrar.class,
ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,
ServletWebServerFactoryConfiguration.EmbeddedJetty.class,
ServletWebServerFactoryConfiguration.EmbeddedUndertow.class
以EmbeddedJetty为例
@ConditionalOnClass({Servlet.class, Server.class, Loader.class,WebAppContext.class}),这个条件注解表示你的类路径下有Jetty的依赖,即导入了Jetty的jar包才会生效,EmbeddedTomcat.class、EmbeddedUndertow.class也同理,但是只能有一个,导入了Jetty的jar包就不能导入其它的,不然会报错。
这里返回JettyServletWebServerFactory这个类:
点进去会发现继承了
AbstractServletWebServerFactory类,点进去后发现AbstractServletWebServerFactory类又继承了AbstractConfigurableWebServerFactory这个类
进入AbstractConfigurableWebServerFactory类就会看到我们所熟悉的8080端口啦
流程视频如下
自动配置原理