阅读 145

ServletWebServerApplicationContext -带有*WebxxxApplication的容器

ServletWebServerApplicationContext.java

创建一个容器,在run()方法中被调用。比如调用onRefresh(),把ServletWebServerApplicationContext注册到ServletContext属性中,并调用ServletContextInitializer启动tomcat容器。

protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {...}
beanFactory.addBeanPostProcessor(new WebApplicationContextServletContextAwareProcessor(this));
添加WebApplicationContextServletContextAwareProcessor这个BeanPostProcessor,是为了实现ServletContextAware接口的类能获得ServletContext

protected void onRefresh() {...}
createWebServer()
调用createWebServer(),详解如下

-createWebServer() {...}
getSelfInitializer().onStartup(servletContext);
调用selfInitialize(),把Spring容器(当前实例)注入ServletContext,ServletContextInitializer-》启动容器

-private void selfInitialize(ServletContext servletContext) throws ServletException {...}

prepareWebApplicationContext(servletContext);
// <1> 添加 Spring 容器到 servletContext 属性中。

registerApplicationScope(servletContext);
// <2> 注册 ServletContextScope

WebApplicationContextUtils.registerEnvironmentBeans(getBeanFactory(), servletContext);
// <3> 注册 web-specific environment beans ("contextParameters", "contextAttributes")

for (ServletContextInitializer beans : getServletContextInitializerBeans()) {...}
beans.onStartup(servletContext);
// <4> 获得所有 ServletContextInitializer ,并逐个进行启动

-protected void prepareWebApplicationContext(ServletContext servletContext) {...}
Object rootContext = servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
获取根容器

servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this);
如果rootContext为空,则把容器设置到servletContext中。

-finishRefresh(){...}
super.finishRefresh();

WebServer webServer = startWebServer();
启动WebServer

publishEvent(new ServletWebServerInitializedEvent(webServer, this));
如果WebServer启动成功,则发布ServletWebServerInitializedEvent事件

-private WebServer startWebServer() {...}
webServer.start();
启动webServer

TomcatServer

-public void start() throws WebServerException {...}
启动tomcat容器
Connector connector = this.tomcat.getConnector();
performDeferredLoadOnStartup();

======
带有*WebxxxApplication的容器。会创建创建SpringMVC

原文:https://www.cnblogs.com/kltsee/p/15217083.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐