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(): 返回的是一个实现了
来源: http://www.bubuko.com/infodetail-2706066.html