Initialize other special beans in specific context subclasses.
核心是创建一个web服务容器(并未在这个方法启动)

createWebServer第182行,获取ServletWebServerFactory的具体实现

getWebServerFactory方法,通过ioc容器获取ServletWebServerFactory实现实例,在这里我指定的server服务是undertow
在这一步之前,ServletWebServerFactory是没有加入IOC容器的,在这里进行初始化

但是在bdMap中,之前通过自动装配,已经添加了org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration。

它是通过加载org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,装载ServetWeb的自动配置类ServletWebServerFactoryAutoConfiguration

进入ServletWebServerFactoryAutoConfiguration,可以看到@Import引入的类,以及@EnableConfigurationProperties(ServerProperties.class),

ServerProperties用来获取服务相关的配置,如server.undertow.threads.io: 16
因为我们用的undertow,进入ServletWebServerFactoryConfiguration.EmbeddedUndertow
是ServletWebServerFactoryConfiguration的一个子类。以UndertowServletWebServerFactory作为ServletWebServerFactory的实现注入到IOC中

回到createWebServer方法-第184行,factory.getWebServer,通过Factory来获取webServer

在createManager过程中,还会调用ServletContextInitializer的实现onStartup,在这个回调,我们可以添加监听器、过滤器以及Servlet

回到createWebServer方法第199行,initPropertySources方法
用于Environment中MutablePropertySources中。key为servletContextInitParams的数据

替换前

替换后

总结:
上一篇:数据库连接池耗尽异常