在SpringBoot中,创建一个应用后,无需添加外部服务器直接就能把项目跑在自带的内部服务器上。原因就是SpringBoot官方使用了一种非常特殊的ApplicationContext -> ServletWebServerApplication,如果当前项目是一个web项目,容器ApplicationContext就会变成Servlet web ServerApplication。它的本质也是一个Application。
原理
-
创建一个web工程,需要引入web场景就会引入tomcat场景。
-
在ServletWebServerFactoryAutoConfiguration自动配置类中
-
@Configuration(proxyBeanMethods = false) @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) @ConditionalOnClass(ServletRequest.class) @ConditionalOnWebApplication(type = Type.SERVLET) @EnableConfigurationProperties(ServerProperties.class) //在自动配置类中引入了三种ServletWebServerFactory服务器的配置类 @Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class, ServletWebServerFactoryConfiguration.EmbeddedTomcat.class, ServletWebServerFactoryConfiguration.EmbeddedJetty.class, ServletWebServerFactoryConf