springboot 中的 tomcat 启动时候的

EmbeddedWebApplicationContext 的onRefresh方法

@Override
    protected void onRefresh() {
        super.onRefresh();
        try {
            createEmbeddedServletContainer();
        }
        catch (Throwable ex) {
            throw new ApplicationContextException("Unable to start embedded container",
                    ex);
        }
    }
private void createEmbeddedServletContainer() {
        EmbeddedServletContainer localContainer = this.embeddedServletContainer;
        ServletContext localServletContext = getServletContext();
        if (localContainer == null && localServletContext == null) {
            EmbeddedServletContainerFactory containerFactory = getEmbeddedServletContainerFactory();
            this.embeddedServletContainer = containerFactory
                    .getEmbeddedServletContainer(getSelfInitializer());
        }
       ……………………………………
        initPropertySources();
    }

这里有三个方法比较重要,
第一个是getEmbeddedServletContainerFactory,这个是去spring工厂获取注册的EmbeddedServletContainerFactory.class,servletContainer的工厂的注册是在
EmbeddedServletContainerAutoConfiguration,也是autoconfigure中注册的,里面根据jar包,判断是TomcatEmbeddedServletContainerFactory,JettyEmbeddedServletContainerFactory还是
UndertowEmbeddedServletContainerFactory,
第二个:TomcatEmbeddedServletContainerFactory的getEmbeddedServletContainer方法,是启动tomcat的核心,里面有实例化各个级别的容器,启动nio,连接servlet和tomcat和spring等
第三个:getSelfInitializer():返回的是一个实现了

猜你喜欢

转载自www.cnblogs.com/chuliang/p/9388800.html