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的数据
替换前
替换后
总结:
上一篇:数据库连接池耗尽异常