- 这个方法会调用createWebServer()方法 。
// 最核心的俩行代码private void createWebServer() { ...... // 获取web容器,多个或者没有的时候报错 ServletWebServerFactory factory = getWebServerFactory(); // 调用这个容器的getWebServer方法,上面的启动tomcat的方法! this.webServer = factory.getWebServer(getSelfInitializer()); ......}
- getWebServerFactory控制项目组有且只能有一个web容器!
protected ServletWebServerFactory getWebServerFactory() { // Use bean names so that we don't consider the hierarchy // 得到所有类型为ServletWebServerFactory的Bean 。TomcatServletWebServerFactory、JettyServletWebServerFactory、UndertowServletWebServerFactory都是他得到子类! String[] beanNames = getBeanFactory().getBeanNamesForType(ServletWebServerFactory.class); // 不存在,报错 if (beanNames.length == 0) { throw new ApplicationContextException("Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean."); } // 存在不止一个,报错! if (beanNames.length > 1) { throw new ApplicationContextException("Unable to start ServletWebServerApplicationContext due to multiple ServletWebServerFactory beans : " + StringUtils.arrayToCommaDelimitedString(beanNames)); } // 返回唯一的一个web容器! return getBeanFactory().getBean(beanNames[0], ServletWebServerFactory.class);}获取tomcat的配置
- 自动配置类ServletWebServerFactoryAutoConfiguration上除了import三个web容器,还import了BeanPostProcessorsRegistrar 。
- BeanPostProcessorsRegistrar实现了ImportBeanDefinitionRegistrar,所以他会在spring启动的时候调用registerBeanDefinitions方法 。
- registerBeanDefinitions会注册一个Bean:webServerFactoryCustomizerBeanPostProcessor 。
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { // Bean工厂,一个Aware回调进行赋值 if (this.beanFactory == null) { return; } // 注册webServerFactoryCustomizerBeanPostProcessor这个Bean 。 registerSyntheticBeanIfMissing(registry, "webServerFactoryCustomizerBeanPostProcessor", WebServerFactoryCustomizerBeanPostProcessor.class, WebServerFactoryCustomizerBeanPostProcessor::new); // 注册errorPageRegistrarBeanPostProcessor registerSyntheticBeanIfMissing(registry, "errorPageRegistrarBeanPostProcessor", ErrorPageRegistrarBeanPostProcessor.class, ErrorPageRegistrarBeanPostProcessor::new);}
- webServerFactoryCustomizerBeanPostProcessor实现了BeanPostProcessor,所以他会在启动的时候调用postProcessBeforeInitialization方法 。
经验总结扩展阅读
-
热水器不出热水怎么回事,电热水器不出热水怎么回事?
-
-
葡萄干配一物,每天喝一杯,不贫血了,眼睛亮了,女人常喝不显老
-
-
-
8月底,痛定思痛,爱恨清空,展望未来,高傲离去,真爱就在眼前
-
相思梧叶影视情感说|《北辙南辕》:中年夫妻应该如何经营婚姻?不妨学学杜世均和司梦
-
-
-
涂抹 “一款三用”的平价口红,不挑肤色巨显白,素颜涂也能彰显高级感
-
2022年农历九月十六修坟吉日 2022年10月11日适合修坟吗
-
-
-
-
怎么开心怎么过 致35岁的女人:往后你要怎么开心怎么过
-
总有人在问 太多婚后的真爱,不过只是一时的激情,根本就当不得真
-
2022年农历腊月初九搬新家吉日 2022年12月31日搬新家好不好
-
喝不完的奶粉可以放到下次喝吗,喝剩的奶粉可以下顿喝吗
-
因为走丢了的哈士奇被送进了派出所,结果把派出所拆了,不愧为拆家王
-