本文最后更新于:2024年4月22日 下午
SpringBoot前置,了解EnableMVC实现原理以及作用
@EnableMvc表示由定制类完全替换默认的springMVC配置,一旦开启
自定springmvc的组件的时候会导致默认的组件失效,采用EnableMvc这种方式会将系统默认加载,再将我们自定义的组件加载,这样都会生效
EnableWebMvc导入了DelegatingWebMvcConfiguration
DelegatingWebMvcConfiguration会加载所有的WebMvcConfigurer并添加到configurers,以模板方法的模式。父类会加载SpringMVC自己本身有的组件,我们也可以自定义这些组件
SpringBoot导入很多配置类
@SpringBootApplication是一个复合型注解,包含了@EnableAutoConfiguration注解
而@EnableAutoConfiguration 又包含如下
@AutoConfigurationPackage又导入了@Import(AutoConfigurationPackages.Registrar.class)
@AutoConfigurationPackage指定了我们以后要扫描哪些包下的所有组件
@Import(AutoConfigurationImportSelector.class) 导入组件,去类路径下找META-INF/spring.factories,这些配置类根据条件以@Bean的形式导入容器
Spring在容器刷新的onRefresh()的时候启动Tomcat
ServletWebServerFactoryAutoConfiguration
@Import ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class
另外还导入了三种web服务器,Tomcat,Jetty,Undertow。默认是Tomcat
而在EmbeddedTomcat中又采用TomcatServletWebServerFactory工厂来创建容器
TomcatServletWebServerFactory中就是传统的以new的形式创建了Tomcat服务器
调用时机
ServletWebServerApplicationContext 在容器刷新12大步refresh的时候执行onfresh来启动web容器
SpringBoot 启动原理
SpringBoot.run
1、run 方法内启动 createApplicationContext 会创建一个IOC容器AnnotationConfigServletWebServerApplicationContext
2、然后执行refreshContext,会执行到Spring刷新12大步,然后再onRefresh时候执行Tomcat的启动
3、Tomcat启动的时候会加载所有的Servlet
4、DispatcherServlet回加载九大组件,然后执行整个初始化流程