zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    django with mysql (part-4)
    django with mysql (part-3)
    django with mysql (part-2)
    [LeetCode] 22. 括号生成(回溯/DP)
    [算法]求满足要求的进制(辗转相除(欧几里得算法),求最大公约数gcd)
    [算法]体积不小于V的情况下的最小价值(0-1背包)
    [LeetCode]96. 不同的二叉搜索树(DP,卡特兰数)
    [LeetCode]98. 验证二叉搜索树
    [LeetCode]21. 合并两个有序链表(递归)
    [LeetCode]538. 把二叉搜索树转换为累加树
  • 原文地址:https://www.cnblogs.com/kltsee/p/15217083.html
Copyright © 2011-2022 走看看